diff options
| author | me_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac> | 2012-06-17 21:15:12 +0000 |
|---|---|---|
| committer | me_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac> | 2012-06-17 21:15:12 +0000 |
| commit | 8df9466ada46e4b07990b9cb7e8b1cd61b96844a (patch) | |
| tree | 2cb652e5839bed672133ffa90e7ad477f55cfb6b /tests/test_client.c | |
| download | pica-pica-8df9466ada46e4b07990b9cb7e8b1cd61b96844a.tar.gz pica-pica-8df9466ada46e4b07990b9cb7e8b1cd61b96844a.zip | |
todo list update
git-svn-id: svn://localhost/project_picapica/trunk@128 fb96df88-216d-11de-830c-f3023f12d8ac
Diffstat (limited to 'tests/test_client.c')
| -rwxr-xr-x | tests/test_client.c | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/tests/test_client.c b/tests/test_client.c new file mode 100755 index 0000000..89e0c8c --- /dev/null +++ b/tests/test_client.c @@ -0,0 +1,234 @@ +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#include "../PICA_client.h" + + +struct sockaddr_in a; +struct PICA_conninfo *c; +struct PICA_chaninfo *chn; + +int _outgoing_chnl=0; + +unsigned char buf[64*1024]; + +int accept_cb(unsigned int id) +{ +printf("accept_cb: %u\n",id); +return 1; +} + +//получение сообщения. +void newmsg_cb(unsigned int peer_id,char* msgbuf,unsigned int nb,int type) +{ +memcpy(buf,msgbuf,nb); +buf[nb]=0; +printf(" %u: ",peer_id); +puts(buf); +} +//получение подтверждения о доставке сообщения +void msgok_cb(unsigned int peer_id) +{ +puts("[V]"); +} +//создание канала с собеседником +void channel_established_cb(unsigned int peer_id) +{ +puts("channel_established_cb"); +} + +void channel_failed_cb(unsigned int peer_id) +{ +printf("Failed to create channel to %u\n",peer_id); +chn=0; +} + +//входящий запрос на создание канала от пользователя с номером caller_id +//<<int accept_cb(unsigned int caller_id); +//запрошенный пользователь не найден, в оффлайне или отказался от общения +void notfound_cb(unsigned int callee_id) +{ +puts("notfound_cb"); +} + +void channel_closed_cb(unsigned int peer_id, int reason) +{ +printf("channel_closed_cb( peer_id = %u, reason = %i)\n", peer_id, reason); +} + +void nodelist_cb(int type, void *addr_bin, const char *addr_str, unsigned int port) +{ +switch(type) + { + case 0xA0: + printf("node (IP %s port %u)\n", addr_str, port); + break; + + case 0xA1: + printf("node (IPv6 %s port %u)", addr_str, port); + break; + + case 0xA2: + printf("node (hostname %s port %u)\n", addr_str, port); + break; + + default: + puts("unknown node address type"); + return; + } +} + +int peer_cert_verify_cb(unsigned int peer_id, const char *cert_pem, unsigned int nb) +{ + printf("peer's certificate (%u): \n%.*s\n", peer_id, nb,cert_pem); + return 1; +} + +struct PICA_client_callbacks cbs = { + newmsg_cb, + msgok_cb, + channel_established_cb, + channel_failed_cb, + accept_cb, + notfound_cb, + channel_closed_cb, + nodelist_cb, + peer_cert_verify_cb +}; + +int main(int argc,char** argv) +{ +int ret; +unsigned int peer_id; + +if (argc<3) + { + puts("usage: test_client address cert_filename [peer id]"); + return 0; + } + +puts(SSLeay_version(SSLEAY_VERSION)); +printf("Calling PICA_init...\n"); + +PICA_client_init(&cbs); + +// printf("setting address...\n"); +// +// memset(&a,0,sizeof(a)); +// +// a.sin_family = AF_INET; +// a.sin_addr.s_addr = inet_addr (argv[1]);//("127.0.0.1"); +// a.sin_port = htons(51914); + + +printf("making connection...\n"); + +//PICA_new_connection(const char *nodeaddr, unsigned int port, const char *CA_file, const char *cert_file, const char *pkey_file, const char* password, struct PICA_conninfo **ci) +ret=PICA_new_connection(argv[1], 51914,"trusted_CA.pem",argv[2],argv[2],NULL,&c); + +ERR_print_errors_fp(stdout); + +if (ret==PICA_OK) +printf("PICA_OK Connected to server...\n"); +else +{ +printf("PICA_new_connection: ret=%i\n",ret); +return 1; +} + +if (argc==4) + { + peer_id=atoi(argv[3]); + printf("Creating channel to %u...\n",peer_id); + + ret=PICA_create_channel(c,peer_id,&chn); + //sleep(17);//timeout test + if (ret!=PICA_OK) + { + printf("error: ret=%i\n",ret); + return 1; + } + + } + +do + { + if (chn && chn->state==PICA_CHANSTATE_ACTIVE) + { + unsigned int msglen; + gets(buf); + msglen=strlen(buf); + + ret=PICA_send_msg(chn,buf,msglen); + + if (ret!=PICA_OK) + printf("PICA_send_msg ret=%i\n",ret); + } + } +while(PICA_read(c,100000) == PICA_OK && PICA_write(c) == PICA_OK); + +/* +puts("Enter peer_id to talk with or . for waiting incoming sessions:"); +gets(buf); +if (buf[0]=='.') + { + unsigned int br; + ret=PICA_read_conn(c,accept_cb,&chn); + + if (ret==PICA_NEWCHAN) + { + puts("PICA_NEWCHAN!"); + } + else + printf("read_conn error: ret=%i\n",ret); + + ret=PICA_read_msg(chn,buf,&br); + switch(ret) + { + case PICA_MSGUTF8: + printf("%u (%u bytes): ",c->id,br); + puts(buf); + break; + case PICA_MSGOK: + puts("[v]"); + break; + default: + printf("PICA_read_msg ret=%i\n",ret); + } + } +else + { + peer_id=atoi(buf); + printf("Creating channel to %u...\n",peer_id); + + ret=PICA_create_channel(c,peer_id,&chn,1); + + if (ret==PICA_OK) + { + unsigned int msglen; + puts("Channel established..."); + gets(buf); + msglen=strlen(buf); + + ret=PICA_send_msg(chn,buf,msglen); + if (ret!=PICA_OK) + printf("PICA_send_msg ret=%i\n",ret); + } + else + printf("error: ret=%i\n",ret); + } + +*/ +sleep(10); + +if (chn) + { + puts("--------"); + PICA_close_channel(chn); + } + +PICA_close_connection(c); + +return 0; +} |
