Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void* TCP_await_JOIN(void* data) {
- PDU_PJOIN *pjoin = NULL;
- packet* pkt;
- CLIENT *c_stru = (CLIENT*)data;
- pkt = rcv_TCP_msg(*c_stru->socket);
- if(pkt==NULL || check_datatype(pkt->data)!=JOIN) {
- printf("SERVER: Tog bort socket %d (await client)\n",*c_stru->socket);
- return NULL;
- } else {
- PDU_JOIN *join = (PDU_JOIN*)pkt->data;
- deserialize(join);
- if(join->ID_length>0 && join->ID!=NULL) {
- queue_enqueue(c_stru->frwrd_queue, c_stru);
- global_clientnum++;
- c_stru->info = join;
- int len=0;
- char* partic_str = create_PARTICIPANTS_STR(c_stru->frwrd_queue,&len);
- if(partic_str!=NULL) {
- PDU_PARTICIPANTS *plist = create_PDU_PARTICIPANTS(global_clientnum,len,partic_str);
- //Calculating len of participants including wordpad
- if(len%WORD == 0) len+=WORD;
- else len+= WORD-(len%WORD);
- send_TCP_msg(*c_stru->socket,plist,(HEADER+len));
- }
- free(partic_str);
- pjoin = create_PDU_PJOIN((unsigned)time(NULL),join->ID);
- serialize(pjoin);
- }
- }
- return pjoin;
- }
- char* create_PARTICIPANTS_STR(queue* que, int *idlen) {
- char* str;
- char buf[BUFSIZE];
- int len;
- CLIENT* stop = NULL;
- queue* q = que;
- if(!queue_isEmpty(q)) {
- stop = queue_front(q);
- strcpy(buf,stop->info->ID);
- len=stop->info->ID_length + 1;
- queue_dequeue(q);
- queue_enqueue(q,stop);
- while(queue_front(q)!=stop) {
- CLIENT* val = queue_front(q);
- int i;
- for(i=0;i<val->info->ID_length;i++){
- buf[len+i] = val->info->ID[i];
- }
- //strncat(buf+len,val->info->ID,val->info->ID_length);
- len+=val->info->ID_length+1;
- queue_dequeue(q);
- queue_enqueue(q,val);
- }
- str=malloc(len);
- memcpy(str,buf,len);
- *idlen=len;
- return str;
- }
- return NULL;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement