{"id":23443296,"url":"https://github.com/bjcode-git/projet_rio","last_synced_at":"2025-04-09T22:27:00.574Z","repository":{"id":240781487,"uuid":"642981401","full_name":"BJCode-git/Projet_RIO","owner":"BJCode-git","description":null,"archived":false,"fork":false,"pushed_at":"2023-05-21T21:41:32.000Z","size":831,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-15T14:19:23.526Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BJCode-git.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-05-19T19:49:46.000Z","updated_at":"2024-05-20T17:37:12.000Z","dependencies_parsed_at":"2024-05-20T22:07:38.507Z","dependency_job_id":"9f3cc1fe-5902-4d3e-ae2c-38631c7fdddc","html_url":"https://github.com/BJCode-git/Projet_RIO","commit_stats":null,"previous_names":["bjcode-git/projet_rio"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BJCode-git%2FProjet_RIO","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BJCode-git%2FProjet_RIO/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BJCode-git%2FProjet_RIO/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BJCode-git%2FProjet_RIO/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BJCode-git","download_url":"https://codeload.github.com/BJCode-git/Projet_RIO/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248121836,"owners_count":21051195,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-23T18:17:34.985Z","updated_at":"2025-04-09T22:27:00.545Z","avatar_url":"https://github.com/BJCode-git.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"Compilation \n\tmake , make all -\u003e compile les programmes client proxy server\n\tmake client -\u003e compile le programme client\n\tmake server -\u003e compile le programme server\n\tmake proxy -\u003e compile le programme proxy\n\tmake docs -\u003e génère une doc partielle\n\tmake test -\u003e génère tout et test l'application\n\nExecution :\n\t\n\nUtilisation : \n\t\u003carg\u003e -\u003e argument obligatoire\n\t(arg) -\u003e argument optionnel\n\nclient \u003cadresse proxy\u003e (port proxy) (port client) :\n\tLance un programme client qui se connecte au proxy en utilisant le protocole TCP\n\tSi le programme n'arrive pas à se connecter, il rééssaie MAX_ATTEMPTS fois\n\tAvec un délai de 1s\n\n\tOn demande en option le port d'écoute du proxy et le port par lequel\n\tnotre client et le proxy divent pouvoir communiquer.\n\tS'il ne sont pas fournis, on utilise par défaut  \n\tDEFAULT_LISTEN_PORT_PROXY pour le port du proxy \n\tet DEFAULT_CLIENT_PORT pour notre client.\n\n\tOn commence par s'authentifier en envoyant un paquet de type\n\tDT_CON permmettant au proxy de se préparer à recevoir le nom du client.\n\tOn envoie ensuite un pseudo.\n\tSi le nom du client existe déjà, le proxy devrait envoyer DT_AEU.\n\tPar gain de temps et de simplicité, ça n'a finalement pas été implémenté.\n\tOn peut donc avoir plusieurs utilisateurs connectés avec le même nom.\n\t\n\tOn demande ensuite à l'utilisateur le nom d'un client ou l'adresse ip\n\td'un client avec qui il voudrait communiquer.\n\tOn commence ensuite le chat en envoyant DT_BOC au proxy.\n\tDans l'idée, celui-ci devra l'aiguiller vers l'autre client \n\tpour lui indiquer qu'un chat va pouvoir débuter.\n\tEnsuite, on échange des paquets de type DT_CEX contenant un caractère\n\tenvoyé par un client.\n\tA la suite de la réception d'un paquet DT_CLO ou DT_EOC de la part d'un autre\n\tclient, on arrête la communication.\n\n\tOn devrait avoir un fonctionnement similaire pour un échange de fichier \n\tavec  DT_BOF, DT_FEX, DT_EOF mais cela demande d'autres fonctions d'interactions \n\tavec l'utilisateur pour sauver le fichier. L'implémentation était prévue mais n'a pas aboutie\n\tpar gain de temps.\n\n\tLes échanges et retransmission fonctionnent un peu à la façon tcp, le serveur acquitte chaque paquet\n\tnon corrompu. Quand on recoit un aquittement, on déplace la fenetre de renvoi des données.\n\tSi on recoit un acquittement négatif on si on dépasse un temps d'attente \n\tavant reception de l'acquittement du dernier paquet envoyé, on renvoit les données de la fenêtre courante.\n\tSi on dépasse un certain nombres de tentatives de renvois, on laisse tomber, on laisse à l'utilsateur\n\tla possibilité d'envoyé un nouveau message, on lui signale que toutes les données n'ont peut-être pa sété envoyées.\n\tDans le cas d'un échange de fichier, on laisse carrément tomber l'échane de fichier. On laissera à l'utilisateur le choix\n\trelancer le protocole d'échange ou non.\n\n\nserveur  (port ecoute)  :\n\tPrend éventuellement en entrée, le port sur lequel écouter.\n\tSinon, on écoute par défaut sur le port DEFAULT_EXCHANGE_PORT_SERVER.\n\n\tLe serveur a un fonctionnement assez simple. Il était initialement multi-threadé \n\tet bufferisé mais il a été simplifié au maximum pour facililter le debuggage et la compréhension \n\tde sa conception. \n\tIl se contente donc dans un premier temps d'attendre une unique entité (le proxy), et accepte la connexion.\n\t\n\tLe serveur se contente de vérifier l'intégrité des données dans le paquet, corriger si possible.\n\tIl envoie un acquittement au client ayant envoyé le paquet si les données son intègres ou corrigées et\n\tIl aiguille le paquet vers le destinataire en renvoyant le paquet vers le proxy.\n\tSi les données ne sont pas intègres, il envoie simplement un paquet de type DT_NAK à l'envoyeur.\n\n\tNote1 : chaque paquet entre via le proxy et chaque paque sortant est envoyé à nouveau vers celui-ci.\n\nproxy \u003cliste des serveurs\u003e (port_ecoute) :\n\n\tLe proxy prend en entrée un fichier contenant une liste de serveur sous le format:\n\t\txxx.xxx.xxx.xxx:port_ecoute_serveur1\n\t\txxx.xxx.xxx.xxx:port_ecoute_serveur2\n\tex: \n\t\t8.8.8.8:80\n\t\t1.1.1.1:53\n\t\t..\n\n\tNote : \n\tLe proxy est configuré de sorte à pouvoir se connecter à plusieurs serveurs, chaque serveur ayant une charge\n\tDès qu'un client se connecte, on lui attribue pour le traitement de ses échanges, le serveur avec la charge la moins élèvée à son arrivée.\n\n\tLe proxy prend en option un port d'écoute, sinon il vaut par défaut DEFAULT_LISTEN_PORT_PROXY.\n\n\tLe proxy introduit pour chaque paquet de données d'échange de type DT_CEX ou DT_FEX, un bruit\n\tpour éventuellement corrompre les données.\n\tIl effectue également un filtrage. Il garde en mémoire les clients en conservant le pseudo du client,\n\tle serveur par lequel transite ses envois. Notamment, quand un client indique qu'il veut arrêter un \n\techange de messages, de fichier ou mettre fin à la connection, le proxy indique directement au client destinatire\n\td'arrêter également l'échange sans passer par le serveur.\n\n\tLe proxy  remplit automatiquement dans le paquet l'adresse de la source.\n\tQuand un paquet lui revient du serveur, il regarder à quel client correspnd l'adresse ip et lui\n\tenvoie le paquet par la socket qui lui est associée.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbjcode-git%2Fprojet_rio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbjcode-git%2Fprojet_rio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbjcode-git%2Fprojet_rio/lists"}