// open socket and file, return 0 if there's an error with any of them bool NetDCC::dcc_send_start (c_char file) { static char errorfile[] = "Error in DCC Send: can't open file."; static char errorbind[] = "Error in DCC Send: can't bind socket."; filename = file; dfd = fopen (filename, "r"); if (dfd == NULL) { if (dcc_from_index == -1) s->irc_privmsg (nick, "%s", errorfile); else s->dccs[dcc_from_index]->dcc_chat_write (errorfile); return 0; } if (!bindsock (s->dcc_port)) { fclose (dfd); dfd = NULL; if (dcc_from_index == -1) s->irc_privmsg (nick, "%s", errorbind); else s->dccs[dcc_from_index]->dcc_chat_write (errorbind); return 0; } socklocal = sock; filesize = lseek (fileno (dfd), 0, SEEK_END); fseek (dfd, 0, SEEK_SET); status = DCC_SEND_INIT; last_time = s->time_now; return 1; }
// open the socket, return 0 on error bool NetDCC::dcc_chat_start (void) { if (!bindsock (s->dcc_port)) { s->irc_privmsg (nick, "Error in DCC Chat: can't bind socket, try again later."); return 0; } socklocal = sock; status = DCC_CHAT_INIT; last_time = s->time_now; return 1; }
int main(int argc, char *argv[]) { char *port; /* Port to host proxy at */ struct sockaddr_in c_addr; /* From address of client */ int sock; /* Server listening socket */ int connection; /* Connection socket */ unsigned int alen; /* From address length */ char remoteIP[INET6_ADDRSTRLEN]; switch(argc) { case 2: port = argv[1]; break; default: fprintf(stderr, "Usage: %s [port]\n", argv[0]); exit(1); } // Create and connect listening socket sock = bindsock(port, QLEN); while(1) { // Handle new connection alen = sizeof(c_addr); connection = accept(sock, (struct sockaddr *)&c_addr, &alen); if (connection < 0) errexit("accept: %s\n", strerror(errno)); printf("New connection from %s on socket %d\n", inet_ntop(c_addr.sin_family, &(c_addr.sin_addr), remoteIP, INET6_ADDRSTRLEN), connection); // Start receiving data from connection if (!fork()) { close(sock); if (interpret(connection) == 0) { printf("closing connection\n"); close(connection); } exit(0); } close(connection); } }
/*创建tcp服务*/ int cretcpser(const char *ip, const int port, const int backlog) { int domain = AF_INET;//AF_INET6 目前没有使用IPV6 int socktype = SOCK_STREAM; int protocol = 0; int sockid = sock(domain, socktype, protocol); if (sockid < 0) { debuginfo("cretcpser->socket failed"); return -1; } int flags = 1; struct linger linger = {0, 0}; setsocketopt(sockid, SOL_SOCKET, SO_KEEPALIVE, (void *)&flags, sizeof(flags)); setsocketopt(sockid, SOL_SOCKET, SO_LINGER, (void *)&linger, sizeof(linger)); setsocketopt(sockid, SOL_SOCKET, SO_REUSEADDR, (void *)&flags, sizeof(flags)); // setsocketopt(sockid, IPPROTO_IP, TCP_NODELAY, (void *)&flags, sizeof(flags)); struct sockaddr_in sockaddr; memset(&sockaddr, 0, sizeof(struct sockaddr_in)); setsockaddrin(&sockaddr, domain, port, ip); if (bindsock(sockid, (struct sockaddr *)&sockaddr, sizeof(struct sockaddr_in)) != 0) { debuginfo("cretcpser->bindsock failed %d", errno); closesock(sockid); return -1; } if (listensock(sockid, backlog) == -1) { debuginfo("cretcpser->listensock failed"); closesock(sockid); return -1; } return sockid; }
void main(int argc,char *argv[]) { int port = 1235; fd_set read_fds,master_fds; int fdmax; int ssocket; struct sockaddr_in remoteaddr; //zeroing fds FD_ZERO(&read_fds); FD_ZERO(&master_fds); //getting socket ssocket = gettcpsock(); fdmax = ssocket; //declaring server address struct sockaddr_in serveraddr; memset(&serveraddr,0,sizeof(serveraddr)); serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1"); serveraddr.sin_family = AF_INET; serveraddr.sin_port = htons(port); //binding the peer to address bindsock(ssocket,serveraddr); //adding listener FD_SET(ssocket,&master_fds); //setting rtt and window size int window,rtt; printf("enter window size: "); scanf("%d",&window); printf("enter rtt: "); scanf("%d",&rtt); char str[30]; printf("enter the file to be sent: "); scanf("%s",str); //open the file FILE *p; p = fopen(str,"r+"); //packets and ackbuffer struct pack *datato; datato = malloc(100*sizeof(struct pack)); struct pack *datafrom; datafrom = malloc(100*sizeof(struct pack)); //make packets invalid makeinvalid(datato); makeinvalid(datafrom); //makepackets makepackets(datato,p); //print(datato); int sendbase = -1; int nextseq = 0; //litsening to port startlisten(ssocket,10); int res; int i; int sendsocket=-1; struct timeval tout; tout.tv_sec = 1; tout.tv_usec = 0; int z = 0; while(1) { read_fds = master_fds; //printf("was here\n"); for(z=0;z<window*3;z++) { if (select(fdmax+1, &read_fds, NULL, NULL, &tout) == -1) errorrep("select"); //printf("after select\n"); for(i=0; i <= fdmax; i++) { //printf("checking socket %d\n",i); if(FD_ISSET(i,&read_fds)) { //printf("%d socket is set\n",i); if(i == ssocket) { //printf("incomming connection\n"); struct sockaddr_in remote; int addrlen = sizeof(remote); int newfd = accept(ssocket,(struct sockaddr *)&remote,&addrlen); sendsocket = newfd; if(newfd < 0) errorrep("accept"); else { FD_SET(newfd,&master_fds); if(newfd > fdmax) fdmax = newfd; printf("selectserver: new connection on socket %d\n",newfd); } } else { //printf("incomming packet\n"); struct pack incomming; res = recv(i,&incomming,sizeof(incomming),0); if(res == 0) { printf("connection closed by socket: %d\n",i); FD_CLR(i,&master_fds); } if(res < 0) errorrep("reciving packet failed:"); if(incomming.sno == -1) ackprocess(&incomming,datato,&sendbase); if(incomming.ackno == -1) { dataprocess(&incomming,datafrom); struct pack ackpacket; ackpacket.sno = -1; ackpacket.ackno = incomming.sno; printf("sending acknoledgement: %d",ackpacket.ackno); send(sendsocket,&ackpacket,sizeof(ackpacket),0); } } } } } if(sendsocket != -1) { sendpacket(datato,&window,&sendbase,&nextseq,sendsocket); int ti = time(NULL); while((time(NULL)) < ti+rtt) { int a=0; a++; //does nothing } //print(datafrom); } } }
void main(int argc,char *argv[]) { if(argc != 2) errorrep("invalid number of arguments\n"); //getting port number int port = atoi(argv[1]); fd_set master; fd_set read_fds; fd_set write_fds; int fdmax; int lispeer; int newpeer; struct sockaddr_in remoteaddr; //zeroing fds FD_ZERO(&master); FD_ZERO(&read_fds); //getting socket lispeer = gettcpsock(); //declaring server address struct sockaddr_in serveraddr; memset(&serveraddr,0,sizeof(serveraddr)); serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1"); serveraddr.sin_family = AF_INET; serveraddr.sin_port = htons(3300); //declaring server address struct sockaddr_in peeraddr; memset(&peeraddr,0,sizeof(peeraddr)); peeraddr.sin_addr.s_addr = INADDR_ANY; peeraddr.sin_family = AF_INET; peeraddr.sin_port = htons(port); //binding the peer to address bindsock(lispeer,peeraddr); //adding listener FD_SET(lispeer,&master); FD_SET(lispeer,&read_fds); //litsening to port startlisten(lispeer,10); //register with the dir server char filename[10]; printf("enter names of files with the peer with spaces:"); scanf("%[^\n]s",&filename[0]); fdmax = lispeer; int dserv = gettcpsock(); if(fdmax < dserv) fdmax = dserv; int res = connect(dserv,(struct sockaddr *)&serveraddr,sizeof(serveraddr)); if(res < 0 ) errorrep("connect"); struct packlist list[50]; /* *(buf+0) = '1'; *(buf+1) = ' '; *(buf+2) = '\0'; strcat(buf,argv[1]); strcat(buf,&username[1]);*/ struct pack reg; reg.type = 1; reg.prt = port; strcpy(reg.filenames,&filename[0]); int pcklen = sizeof(struct pack); send(dserv,®,pcklen,0); struct sockaddr_in filepeer,remote; FILE *put; while(1) { char name[10]; printf("enter file to be downloaded:"); scanf("%s",&name[0]); struct pack req; req.type=2; req.prt = 0; strcpy(req.filenames,name); res = send(dserv,&req,sizeof(struct pack),0); if(res < 0) perror("req message failed to be sent"); int fileport; res = recv(dserv,&fileport,sizeof(fileport),0); if(res < 0) perror("server failed to send the list"); printf("received %d as the fileport\n",fileport); printf("do you want to get the file 1-yes 0-no\n"); int answer; scanf("%d",&answer); if(answer) { int getfile = gettcpsock(); memset(&filepeer,0,sizeof(filepeer)); filepeer.sin_addr.s_addr = inet_addr("127.0.0.1"); filepeer.sin_family = AF_INET; filepeer.sin_port = htons(fileport); res = connect(getfile,(struct sockaddr *)&filepeer,sizeof(filepeer)); if(res < 0) errorrep("connection to getfile failed"); if(fdmax < getfile) fdmax = getfile; FD_SET(getfile,&read_fds); res = send(getfile,&req,sizeof(struct pack),0); if(res < 0) errorrep("send file req"); if (select(fdmax+1, &read_fds, &write_fds, NULL, NULL) == -1) { perror("select"); exit(4); } FILE *get; get = fopen(&name[0],"w+"); int i; for(;;) { for(i=0; i<=fdmax; i++) { if(FD_ISSET(i,&read_fds)) { if(i == lispeer) { int addrlen = sizeof remote; int newfd = accept(lispeer,(struct sockaddr *)&remote,&addrlen); if(newfd < 0) errorrep("accept"); else { FD_SET(newfd,&write_fds); if(newfd > fdmax) fdmax = newfd; printf("selectserver: new connection on socket %d\n",newfd); struct pack filereq; int res = recv(newfd,&filereq,sizeof(filereq),0); if(res < 0) errorrep("here\n"); put = fopen(filereq.filenames,"r+"); } } else { char buf[256]; res = recv(i,buf,sizeof(buf),0); if(res == 0) printf("connection closed by socket %d\n",i); if(res < 0) { errorrep("recv"); FD_CLR(i,&master); close(i); } printf("getting: %s\n",buf); fprintf(get,"%s",buf); //free(buf); } if(FD_ISSET(i,&write_fds)) { char buf[256]; int nu = fscanf(put,"%[^\n]s",&buf[0]); if(nu < 0) shutdown(i,2); else printf("sending: %s\n",buf); res = send(i,buf,sizeof(buf),0); //free(buf); } } } } } } }
void ftp_clean(int send, char *buf, unsigned long *bytes, int ftpsrv) { char *port_start; int rporthi, lporthi; int lportlo, rportlo; int lport, rport; int remip[4]; int localsock; int socksize = sizeof(struct sockaddr_in); struct sockaddr_in newsession; struct sockaddr_in sockname; if (ftpsrv == 0) { /* is this a port commando ? */ if(strncmp(buf, "PORT", 4)) { redir_write(send, buf, (*bytes), REDIR_OUT); return; } /* parse the old address out of the buffer */ port_start = strchr(buf, ' '); sscanf(port_start, " %d,%d,%d,%d,%d,%d", &remip[0], &remip[1], &remip[2], &remip[3], &rporthi, &rportlo); } else { /* is this a passive mode return ? */ if(strncmp(buf, "227", 3)) { redir_write(send, buf, (*bytes), REDIR_OUT); return; } /* parse the old address out of the buffer */ port_start = strchr(buf, '('); sscanf(port_start, "(%d,%d,%d,%d,%d,%d", &remip[0], &remip[1], &remip[2], &remip[3], &rporthi, &rportlo); } /* get the outside interface so we can listen */ if(getsockname(send, (struct sockaddr *)&sockname, &socksize) != 0) { perror("getsockname"); exit(1); } rport = (rporthi << 8) | rportlo; /* we need to listen on a port for the incoming connection. we will use the port 0, so let the system pick one. */ localsock = bindsock(inet_ntoa(sockname.sin_addr), 0, 1); /* get the real info */ if(getsockname(localsock, (struct sockaddr *)&sockname, &socksize) < 0) { perror("getsockname"); if (dosyslog) syslog(LOG_ERR, "getsockname failed: %m"); exit(1); } lport = ntohs(sockname.sin_port); lporthi=(lport >> 8 ) & 0xff; lportlo=lport & 0xff; /* check to see if we bound */ if(localsock == -1) { fprintf(stderr, "ftp: unable to bind new listening address\n"); exit(1); } if (ftpsrv == 0) { /* send the new port and ipaddress to the server */ (*bytes) = sprintf(buf, "PORT %d,%d,%d,%d,%d,%d\n", sockname.sin_addr.s_addr & 0xff, (sockname.sin_addr.s_addr >> 8) & 0xff, (sockname.sin_addr.s_addr >> 16) & 0xff, sockname.sin_addr.s_addr >> 24, lporthi, lportlo); } else {
void main(int argc,char *argv[]) { /*if(argc != 2) errorrep("invalid number of arguments\n"); //getting port number int port = atoi(argv[1]);*/ fd_set master; fd_set read_fds; fd_set write_fds; int fdmax; int lispeer,p2,p3,p4; int newpeer; struct sockaddr_in remoteaddr; //zeroing fds FD_ZERO(&master); FD_ZERO(&read_fds); FD_ZERO(&write_fds); //getting socket lispeer = gettcpsock(); p2 = gettcpsock(); p3 = gettcpsock(); p4 = gettcpsock(); //declaring peer2 address struct sockaddr_in serveraddr; memset(&serveraddr,0,sizeof(serveraddr)); serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1"); serveraddr.sin_family = AF_INET; serveraddr.sin_port = htons(3301); //declaring peer3 address struct sockaddr_in paddr; memset(&paddr,0,sizeof(serveraddr)); paddr.sin_addr.s_addr = inet_addr("127.0.0.1"); paddr.sin_family = AF_INET; paddr.sin_port = htons(3302); //decalring peer4 address struct sockaddr_in peaddr; memset(&peaddr,0,sizeof(serveraddr)); peaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); peaddr.sin_family = AF_INET; peaddr.sin_port = htons(3303); //declaring server address struct sockaddr_in peeraddr; memset(&peeraddr,0,sizeof(peeraddr)); peeraddr.sin_addr.s_addr = INADDR_ANY; peeraddr.sin_family = AF_INET; peeraddr.sin_port = htons(3300); //binding the peer to address bindsock(lispeer,peeraddr); //adding listener FD_SET(lispeer,&master); FD_SET(lispeer,&read_fds); FD_SET(p2,&write_fds); FD_SET(p3,&write_fds); FD_SET(p4,&write_fds); //litsening to port startlisten(lispeer,10); fdmax = lispeer; if(fdmax < p2) fdmax = p2; if(fdmax < p3) fdmax = p3; if(fdmax < p4) fdmax = p4; /* //register with the dir server char filename[10]; printf("enter names of files with the peer with spaces:"); scanf("%[^\n]s",&filename[0]); fdmax = lispeer; int dserv = gettcpsock(); if(fdmax < dserv) fdmax = dserv; int res = connect(dserv,(struct sockaddr *)&serveraddr,sizeof(serveraddr)); if(res < 0 ) errorrep("connect"); struct packlist list[50]; /* *(buf+0) = '1'; *(buf+1) = ' '; *(buf+2) = '\0'; strcat(buf,argv[1]); strcat(buf,&username[1]);*/ /* struct pack reg; reg.type = 1; reg.prt = port; strcpy(reg.filenames,&filename[0]); int pcklen = sizeof(struct pack); send(dserv,®,pcklen,0); struct sockaddr_in filepeer,remote; FILE *put;*/ // connect(p2,(struct sockaddr *)&serveraddr,sizeof(serveraddr)); // connect(p3,(struct sockaddr *)&paddr,sizeof(paddr)); // connect(p4,(struct sockaddr *)&peaddr,sizeof(peaddr)); int i; FILE *fp; fp = fopen("peer1","r+"); char *buffer; int connections = 0; int newfd; for(;;) { FILE *p; p = fopen("rcv1","r+"); if (select(fdmax+1, &read_fds,NULL, NULL,NULL) == -1) { perror("select"); exit(4); } for(i=0;i<=fdmax;i++) { if(FD_ISSET(i,&read_fds)) { if(i == lispeer) { int addrlen = sizeof remoteaddr; newfd = accept(lispeer,(struct sockaddr *)&remoteaddr,&addrlen); if(newfd < 0) errorrep("accept"); else { printf("some one knocking connections\n"); FD_SET(newfd,&read_fds); if(newfd > fdmax) fdmax = newfd; printf("selectserver: new connection on socket %d\n",newfd); if(connections == 0) connect(p2,(struct sockaddr *)&serveraddr,sizeof(serveraddr)); else if(connections == 1) connect(p3,(struct sockaddr *)&paddr,sizeof(paddr)); else if(connections == 2) connect(p4,(struct sockaddr *)&peaddr,sizeof(peaddr)); connections++; printf("connection number %d\n",connections); } } else { printf("in else\n"); int nbytes; buffer = malloc(4*sizeof(char)); if((nbytes = recv(i,buffer,4*sizeof(char),0)) <= 0) { if(nbytes == 0) printf("connection closed by socket %d\n",i); else errorrep("recv"); FD_CLR(i,&read_fds); close(i); } else { printf("recived %d bytes\n",nbytes); //fread(buffer,sizeof(char),4,p); fseek(p,0,SEEK_END); int j; for(j=0;j<4;j++) fprintf(p,"%c",*(buffer+j)); free(buffer); } int k; if(connections == 3) { buffer = malloc(4*sizeof(char)); fread(buffer,sizeof(char),4,fp); /*for(k=0;k<=fdmax;k++) { if(FD_ISSET(k,&write_fds)) { int sbytes = send(k,buffer,4*sizeof(char),0); printf("sent %d to %d",sbytes,k); } }*/ send(p2,buffer,4,0); send(p3,buffer,4,0); send(p4,buffer,4,0); } } } } fclose(p); } /*while(1) { char name[10]; printf("enter file to be downloaded:"); scanf("%s",&name[0]); struct pack req; req.type=2; req.prt = 0; strcpy(req.filenames,name); res = send(dserv,&req,sizeof(struct pack),0); if(res < 0) perror("req message failed to be sent"); int fileport; res = recv(dserv,&fileport,sizeof(fileport),0); if(res < 0) perror("server failed to send the list"); printf("received %d as the fileport\n",fileport); printf("do you want to get the file 1-yes 0-no\n"); int answer; scanf("%d",&answer); if(answer) { int getfile = gettcpsock(); memset(&filepeer,0,sizeof(filepeer)); filepeer.sin_addr.s_addr = inet_addr("127.0.0.1"); filepeer.sin_family = AF_INET; filepeer.sin_port = htons(fileport); res = connect(getfile,(struct sockaddr *)&filepeer,sizeof(filepeer)); if(res < 0) errorrep("connection to getfile failed"); if(fdmax < getfile) fdmax = getfile; FD_SET(getfile,&read_fds); res = send(getfile,&req,sizeof(struct pack),0); if(res < 0) errorrep("send file req"); if (select(fdmax+1, &read_fds, &write_fds, NULL, NULL) == -1) { perror("select"); exit(4); } FILE *get; get = fopen(&name[0],"w+"); int i; for(;;) { for(i=0; i<=fdmax; i++) { if(FD_ISSET(i,&read_fds)) { if(i == lispeer) { int addrlen = sizeof remote; int newfd = accept(lispeer,(struct sockaddr *)&remote,&addrlen); if(newfd < 0) errorrep("accept"); else { FD_SET(newfd,&write_fds); if(newfd > fdmax) fdmax = newfd; printf("selectserver: new connection on socket %d\n",newfd); struct pack filereq; int res = recv(newfd,&filereq,sizeof(filereq),0); if(res < 0) errorrep("here\n"); put = fopen(filereq.filenames,"r+"); } } else { char buf[256]; res = recv(i,buf,sizeof(buf),0); if(res == 0) printf("connection closed by socket %d\n",i); if(res < 0) { errorrep("recv"); FD_CLR(i,&master); close(i); } printf("getting: %s\n",buf); fprintf(get,"%s",buf); //free(buf); } if(FD_ISSET(i,&write_fds)) { char buf[256]; int nu = fscanf(put,"%[^\n]s",&buf[0]); if(nu < 0) shutdown(i,2); else printf("sending: %s\n",buf); res = send(i,buf,sizeof(buf),0); //free(buf); } } } } } }*/ }
void main() { fd_set master; fd_set read_fds; int fdmax; int listener; int newfd; char *buf; buf = malloc(256*sizeof(char)); struct sockaddr_in remoteaddr; //zeroing fds FD_ZERO(&master); FD_ZERO(&read_fds); //getting socket listener = gettcpsock(); //declaring server address struct sockaddr_in serveraddr; memset(&serveraddr,0,sizeof(serveraddr)); serveraddr.sin_addr.s_addr = INADDR_ANY; serveraddr.sin_family = AF_INET; serveraddr.sin_port = htons(3300); //binding the server to address bindsock(listener,serveraddr); //adding listener to serv FD_SET(listener,&master); //litsening to the port startlisten(listener,10); fdmax = listener; int addrlen; FILE *p; p = fopen("peer","r+"); if(p == NULL) errorrep("fopen"); for(;;) { read_fds = master; if (select(fdmax+1, &read_fds, NULL, NULL, NULL) == -1) { perror("select"); exit(4); } int i; for(i=0; i<=fdmax; i++) { if(FD_ISSET(i,&read_fds)) { if(i == listener) { addrlen = sizeof remoteaddr; newfd = accept(listener,(struct sockaddr *)&remoteaddr,&addrlen); if(newfd < 0) errorrep("accept"); else { FD_SET(newfd,&master); if(newfd > fdmax) fdmax = newfd; printf("selectserver: new connection on socket %d\n",newfd); } } else { int nbytes; if((nbytes = recv(i,buf,sizeof buf,0)) <= 0) { if(nbytes == 0) printf("connection closed by socket %d\n",i); else errorrep("recv"); FD_CLR(i,&master); close(i); } else { if(buf[0] == '1') fprintf(p,"%s",buf+2); if(buf[0] == '2') { printf("request for filename %s",(buf+2)); } } } } } } }
int main(int argc, char **argv) { unsigned char pkt[MAXACARSLEN]; char *basename = "acarsserv.sqb"; char *bindaddr = "[::]"; int c; int res; while ((c = getopt(argc, argv, "vb:N:asd")) != EOF) { switch (c) { case 'v': verbose = 1; break; case 'N': bindaddr = optarg; break; case 'b': basename = optarg; break; case 'a': allmess = 1; break; case 's': station = 1; break; case 'd': dupmess = 1; break; default: usage(); exit(1); } } if (bindsock(bindaddr)) { fprintf(stderr, "failed to connect\n"); exit(1); } if (initdb(basename)) { fprintf(stderr, "could not init sql base %s\n", basename); exit(1); } do { int len; acarsmsg_t *msg; struct tm tmp; char reg[8]; char ipaddr[INET6_ADDRSTRLEN]; struct sockaddr_in6 src_addr; socklen_t addrlen; char *mpt, *bpt; msg = calloc(sizeof(acarsmsg_t), 1); addrlen = sizeof(src_addr); bzero(&src_addr, addrlen); len = recvfrom(sockfd, pkt, MAXACARSLEN, 0, (struct sockaddr *)&src_addr, &addrlen); if (len <= 0) { fprintf(stderr, "read %d\n", len); continue; } if (len < 31) { continue; } pkt[len] = 0; mpt = pkt; bpt = mpt + 8; if (*bpt != ' ') continue; *bpt = '\0'; strcpy(msg->idst, mpt); mpt = bpt + 1; bpt = mpt + 1; if (*bpt != ' ') continue; *bpt = '\0'; msg->chn = atoi(mpt); mpt = bpt + 1; bpt = mpt + 2; if (*bpt != '/') continue; *bpt = '\0'; tmp.tm_mday = atoi(mpt); mpt = bpt + 1; bpt = mpt + 2; if (*bpt != '/') continue; *bpt = '\0'; tmp.tm_mon = atoi(mpt); mpt = bpt + 1; bpt = mpt + 4; if (*bpt != ' ') continue; *bpt = '\0'; tmp.tm_year = atoi(mpt); mpt = bpt + 1; bpt = mpt + 2; if (*bpt != ':') continue; *bpt = '\0'; tmp.tm_hour = atoi(mpt); mpt = bpt + 1; bpt = mpt + 2; if (*bpt != ':') continue; *bpt = '\0'; tmp.tm_min = atoi(mpt); mpt = bpt + 1; bpt = mpt + 2; if (*bpt != ' ') continue; *bpt = '\0'; tmp.tm_sec = atoi(mpt); mpt = bpt + 1; bpt = mpt + 1; if (*bpt != ' ') continue; msg->err = atoi(mpt); mpt = bpt + 1; bpt = mpt + 3; if (*bpt != ' ') continue; *bpt = '\0'; msg->lvl = atoi(mpt); mpt = bpt + 1; bpt = mpt + 1; if (*bpt != ' ') continue; *bpt = '\0'; msg->mode = *mpt; mpt = bpt + 1; bpt = mpt + 7; if (*bpt != ' ') continue; *bpt = '\0'; strcpy(reg, mpt); mpt = bpt + 1; bpt = mpt + 1; if (*bpt != ' ') continue; *bpt = '\0'; msg->ack = *mpt; mpt = bpt + 1; bpt = mpt + 2; if (*bpt != ' ') continue; *bpt = '\0'; strcpy(msg->label, mpt); mpt = bpt + 1; bpt = mpt + 1; if (*bpt != ' ') continue; *bpt = '\0'; msg->bid = *mpt; mpt = bpt + 1; bpt = mpt + 4; if (*bpt != ' ') continue; *bpt = '\0'; strcpy(msg->no, mpt); mpt = bpt + 1; bpt = mpt + 6; if (*bpt != ' ') continue; *bpt = '\0'; strcpy(msg->fid, mpt); mpt = bpt + 1; strncpy(msg->txt, mpt, 220); msg->txt[220] = '\0'; fixreg(msg->reg, reg); tmp.tm_isdst = 0; tmp.tm_mon -= 1; tmp.tm_year -= 1900; msg->tm = timegm(&tmp); get_ip_str((struct sockaddr *)&src_addr, ipaddr, INET6_ADDRSTRLEN); if (verbose) fprintf(stdout, "MSG %s %1d %1c %7s %1c %2s %1c %4s %6s %s\n", ipaddr, msg->chn, msg->mode, msg->reg, msg->ack, msg->label, msg->bid, msg->no, msg->fid, msg->txt); processpkt(msg, ipaddr); free(msg); } while (1); }