void handle_new_connection() { int listnum; /* Current item in connectlist for for loops */ int connection; /* Socket file descriptor for incoming connections */ /* We have a new connection coming in! We'll try to find a spot for it in connectlist. */ connection = accept(sock,NULL,NULL); if (connection < 0) { perror("accept"); exit(EXIT_FAILURE); } setnonblocking(connection); for (listnum = 0; (listnum < BACKLOG) && (connection != -1); listnum ++) if (connectlist[listnum] == 0) { printf("\nConnection accepted: FD=%d; Slot=%d\n", connection,listnum); connectlist[listnum] = connection; sock_puts(connection,"Connected yoooo!\r\n"); connection = -1; } if (connection != -1) { /* No room left in the queue! */ printf("\nNo room left for new client.\n"); sock_puts(connection,"Sorry, this server is too busy.Try again later!\r\n"); close(connection); } }
void write_socks(char q[]) { int listnum; /* Current item in connectlist for for loops */ for (listnum = 0; listnum < BACKLOG; listnum++) { if(connectlist[listnum]!=0) { sock_puts(connectlist[listnum],q); sock_puts(connectlist[listnum],"\n"); //printf("Send Question: \n"); //printQuestion(q); //printf("To: %d \n",connectlist[listnum]); } } /* for (all entries in queue) */ }
int cmd_who(int server_socket, char *cmdbuf) { char buf[1024]; char *t = NULL; sock_puts(server_socket, "RWHO"); sock_getln(server_socket, buf, sizeof buf); printf("%s\n", &buf[4]); if (buf[0] != '1') { return(cmdret_error); } printf( "Session User name Room From host\n"); printf( "------- ------------------------- ------------------- ------------------------\n"); while (sock_getln(server_socket, buf, sizeof buf), strcmp(buf, "000")) { //7872|Dampfklon| |p5DE44943.dip.t-dialin.net||1330016445|CHEK|.||||1 t = strtok(buf, "|"); /* session number */ printf("%-7d ", atoi(t)); t = strtok(NULL, "|"); printf("%-26s", t); /* user name */ t = strtok(NULL, "|"); /* room name */ printf("%-19s ", t); t = strtok(NULL, "|"); /* from host */ printf("%-24s\n", t); } return(cmdret_ok); }
int main(int argc, char **argv) { int server_socket = 0; char buf[1024]; int ipgm_secret = (-1); int a, c, i = 0; char *ctdldir = "/usr/local/citadel" ; while ((a = getopt(argc, argv, "vh:")) != EOF) switch(a) { case 'v': verbose = 1; break; case 'h': ctdldir = strdup(optarg); break; default: fprintf(stderr, "%s: usage: %s [-v]\n", argv[0], argv[0]); return(1); } if (verbose) { printf("\nAuto-submit spam and ham to sa-learn for Citadel " PACKAGE_VERSION "\n"); printf("(c) 2009-2011 citadel.org GPLv3\n"); } if (chdir(ctdldir) != 0) { fprintf(stderr, "%s: cannot change directory to %s: %s\n", argv[0], ctdldir, strerror(errno)); return(errno); } else if (verbose) { fprintf(stderr, "Changed directory to %s\n", ctdldir); } server_socket = (-1); if (verbose) fprintf(stderr, "Connecting to server...\n"); server_socket = uds_connectsock("citadel-admin.socket"); if (server_socket < 0) { if (verbose) fprintf(stderr, "Could not connect to Citadel server.\n"); exit(1); } sock_getln(server_socket, buf, sizeof buf); if (verbose) printf("%s\n", &buf[4]); if (buf[0] == '2') { do_room(server_socket, "0000000001.spam", "--dbpath /home/spam/.spamassassin --spam"); do_room(server_socket, "0000000001.ham", "--dbpath /home/spam/.spamassassin --ham"); } sock_puts(server_socket, "QUIT"); sock_getln(server_socket, buf, sizeof buf); if (verbose) printf("%s\n", &buf[4]); close(server_socket); exit(0); }
int main(int argc, char *argv[]) { FILE *bron; float distweight[1024]; float total,max,threshold; int i,j,nrddt,mid,sock,connected,nrdist,maxnr; char **dtwords; char **dwords; char thisdtword[1024]; char thisdword[1024]; char locaps[1024]; char target[1024]; char stem[1024]; char classifyline[32768]; char line[32768]; char buff[32768]; char feats[NRFEAT][1024]; char *part; char category[1024]; char ddtmatch; sscanf(argv[1],"%f",&threshold); if ((threshold<0.5)|| (threshold>1.0)) { fprintf(stderr,"[t-dt_checker] ERROR: threshold value not between 0.5 and 1.0\n"); exit(1); } bron=fopen(argv[2],"r"); nrddt=0; fgets(line,32768,bron); while (!feof(bron)) { nrddt++; fgets(line,32768,bron); } fclose(bron); dtwords=malloc(nrddt*sizeof(char*)); dwords=malloc(nrddt*sizeof(char*)); bron=fopen(argv[2],"r"); for (i=0; i<nrddt; i++) { fscanf(bron,"%s %s ", thisdtword,thisdword); dtwords[i]=malloc((strlen(thisdtword)+1)*sizeof(char)); strcpy(dtwords[i],thisdtword); dwords[i]=malloc((strlen(thisdword)+1)*sizeof(char)); strcpy(dwords[i],thisdword); } fclose(bron); if (DEBUG) fprintf(stderr,"read %d t-dt triggers from %s\n", nrddt,argv[2]); // process inst file // first, start up communications with the Timbl server ignore_pipe(); sock=make_connection(PORT,SOCK_STREAM,MACHINE); if (sock==-1) { fprintf(stderr,"the confusible server is not responding\n"); exit(1); } else connected=1; // cut off the Timbl welcome message sock_gets(sock,buff,sizeof(buff)-1); // cut off the Timbl base message sock_gets(sock,buff,sizeof(buff)-1); // tell the Timbl server to use the t-dt base sock_puts(sock,"base t-dt\n"); // cut off the Timbl acknowledgement sock_gets(sock,buff,sizeof(buff)-1); mid=NRFEAT/2; bron=fopen(argv[3],"r"); fgets(line,32768,bron); while (!feof(bron)) { part=strtok(line," \n"); for (i=0; ((part!=NULL)&&(i<NRFEAT)); i++) { strcpy(feats[i],part); part=strtok(NULL," \n"); } if (!((strcmp(feats[mid],"<begin>")==0)|| (strcmp(feats[mid],"<end>")==0))) { strcpy(locaps,""); for (i=0; i<strlen(feats[mid]); i++) { strcat(locaps," "); if ((feats[mid][i]>='A')&& (feats[mid][i]<='Z')) locaps[i]=feats[mid][i]+32; else locaps[i]=feats[mid][i]; } ddtmatch=0; i=0; while ((i<nrddt)&& (!ddtmatch)) { if ((strcmp(feats[mid],dtwords[i])==0)|| (strcmp(locaps,dtwords[i])==0)|| (strcmp(feats[mid],dwords[i])==0)|| (strcmp(locaps,dwords[i])==0)) ddtmatch=1; if (!ddtmatch) i++; } fprintf(stdout,"%s", feats[mid]); if (ddtmatch) { // call Timbl strcpy(classifyline,"c "); for (j=0; j<NRFEAT; j++) { strcat(classifyline,feats[j]); strcat(classifyline," "); } strcat(classifyline,"?\n"); if (DEBUG) fprintf(stderr,"\ncalling Timbl with %s", classifyline); sock_puts(sock,classifyline); sock_gets(sock,buff,sizeof(buff)); if (DEBUG) fprintf(stderr,"getting back: %s\n", buff); part=strtok(buff," \n"); part=strtok(NULL," \n"); strcpy(category,""); for (j=1; j<strlen(part)-1; j++) { strcat(category," "); category[j-1]=part[j]; } while ((part!=NULL)&& (strcmp(part,"{")!=0)) part=strtok(NULL," \n"); if (part!=NULL) { nrdist=0; while ((part!=NULL)&& (strcmp(part,"}")!=0)) { part=strtok(NULL," \n"); if (strcmp(part,"}")!=0) { part=strtok(NULL," \n"); if (part[strlen(part)-1]==',') sscanf(part,"%f,",&distweight[nrdist]); else sscanf(part,"%f",&distweight[nrdist]); nrdist++; } } if (DEBUG) { fprintf(stderr,"distro of %d: ", nrdist); for (i=0; i<nrdist; i++) fprintf(stderr," %9.4f", distweight[i]); } max=0.0; total=0.0; for (i=0; i<nrdist; i++) { total+=distweight[i]; if (distweight[i]>max) { max=distweight[i]; maxnr=i; } } if (DEBUG) fprintf(stderr," - max %6.3f certainty\n", (max/total)); if ((max/total>=threshold)&& (total>MINOCC)) { if (strcmp(category,target)!=0) { fprintf(stdout," %s", category); fprintf(stderr,"correcting %s to %s\n", feats[mid],category); } } } } fprintf(stdout,"\n"); } fgets(line,32768,bron); } fclose(bron); close(sock); return 0; }
int ftpsession(struct Url *url,struct HTTPrecord *cache,char *uploadfile) { longword host; char str[256]; char buffer[BUFLEN+2]; tcp_Socket datasocket; word dataport=0; int rv=0,len; char *ptr,*datahostptr,datahost[80]; char isdir=0,retry=0;//,ascii=0; long total=0; //!!glennmcc: Nov 11, 2007 -- for 'dblp code' below int dblp=0; //!!glennmcc: end //!!glennmcc: Nov 13, 2007 -- for EZNOS2 fix below int eznos2=0; //!!glennmcc: end int log; if(!tcpip)return 0; free_socket(); if((!url->file[0] || url->file[strlen(url->file)-1]=='/') && !uploadfile) isdir=1; sprintf(str,msg_askdns,url->host); outs(str); GlobalLogoStyle=0; //SDL set resolve animation host=resolve_fn( url->host, (sockfunct_t) TcpIdleFunc ); //SDL // host=resolve( url->host ); if(!host) { DNSerr(url->host); return 0; } // if(!uploadfile) //!glennmcc: Oct 20, 2012 - commented-out to make upload log more verbose log=a_open("FTP.LOG",O_BINARY|O_WRONLY|O_CREAT|O_TRUNC,S_IREAD|S_IWRITE); GlobalLogoStyle=2; //SDL set connect animation if (!tcp_open( socket, locport(), host, url->port, NULL )) { sprintf(str,msg_errcon,url->host); outs(str); return 0; } sprintf(str,msg_con,url->host,url->port); outs(str); write(log,str,strlen(str)); write(log,"\r\n",2); sock_wait_established(socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status); //SDL GlobalLogoStyle=1; //SDL set data animation sock_mode( socket, TCP_MODE_ASCII ); outs(MSG_LOGIN); do { sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); write(log,buffer,strlen(buffer)); write(log,"\r\n",2); // printf("FTP daemon said>"); // puts(buffer); if ( *buffer != '2' && buffer[0]!=' ') goto quit; } while(buffer[3]=='-' || buffer[0]==' '); //continued message! if(!url->user[0]) ptr="anonymous"; else ptr=url->user; sprintf( str, "USER %s", ptr); write(log,str,strlen(str)); write(log,"\r\n",2); sock_puts(socket,(unsigned char *)str); sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); write(log,buffer,strlen(buffer)); write(log,"\r\n",2); // printf("FTP daemon said>"); // puts(buffer); //!!glennmcc: May 11, 2005 //removed due to the fact that not all sites use '3' //see additional info below with respect to anonymous password // if ( *buffer != '3' ) goto quit; //!!glennmcc: end //open cache filename: //!glennmcc: Oct 20, 2012 - commented-out to make upload log more verbose // if(uploadfile) // strcpy(cache->locname,"FTP.LOG"); // else //!glennmcc end: Oct 20, 2012 { //!!glennmcc: Oct 22, 2008 -- strchr() was preventing the use of 'CachePath .\cache\' // ptr=strchr(cache->locname,'.'); ptr=strrchr(cache->locname,'.'); //!!glennmcc: end if(ptr) { strcpy(&ptr[1],"FTP"); strcpy(cache->rawname,cache->locname); } } cache->handle=a_open(cache->locname,O_BINARY|O_WRONLY|O_CREAT|O_TRUNC,S_IREAD|S_IWRITE); if(cache->handle<0) goto quit; strcpy(cache->mime,"text/plain"); if(url->password[0]) ptr=url->password; else { if(url->user[0] && !strcmp(url->host,AUTHENTICATION->host) && !strcmp(AUTHENTICATION->realm,"$ftp")) ptr=AUTHENTICATION->password; else { ptr=configvariable(&ARACHNEcfg,"FakeFTPeMail",NULL); if(!ptr || !strchr(ptr,'@')) { ptr=configvariable(&ARACHNEcfg,"eMail",NULL); if(!ptr) ptr="@"; } } } //!!glennmcc: May 11, 2005 //some sites do not require a password after 'anonymous' //therefer, this entire block is now within this 'if()' so that //the password (email address), will only be sent if asked for //!!glennmcc: Nov 13, 2007 -- EZNOS2 says "Enter PASS command" if (strstr(buffer,"sword") || strstr(buffer,"Enter PASS command")) //if (strstr(buffer,"sword"))//original line { sprintf( str, "PASS %s", ptr); sock_puts(socket,(unsigned char *)str); write(log,str,strlen(str)); write(log,"\r\n",2); }//!!glennmcc: inserted Mar 02, 2008 //Some servers need the following 'do/while' section, //therefore, only the section above for sending the password needs to be //'blocked' when no password was requested. do { sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); write(log,buffer,strlen(buffer)); write(log,"\r\n",2); // printf("FTP daemon said>"); // puts(buffer); if (strstr(buffer,"Enter PASS command")) eznos2=1; if (*buffer != '2' && buffer[0]!=' ' && !eznos2) { write(cache->handle,buffer,strlen(buffer)); rv=1; goto quit; } else if ((buffer[3]=='-' || buffer[0]==' ') && (isdir || uploadfile)) { strcat(buffer,"\r\n"); rv=1; write(cache->handle,buffer,strlen(buffer)); } } while(buffer[3]=='-' || buffer[0]==' ' || buffer[0]=='3'); //continued message! //}//!!glennmcc: end May 11, 2005 -- removed on Mar 02, 2008 //ask server where we have to connect: sock_puts(socket,(unsigned char *)"PASV"); sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); write(log,buffer,strlen(buffer)); write(log,"\r\n",2); // printf("FTP daemon said>"); // puts(buffer); //2xx Entering passive mode (a,b,c,d,x,y) if ( *buffer != '2' ) goto quit; datahostptr=strchr(buffer,'('); //!!glennmcc: Nov 13, 2007 -- EZNOS2 doesn't enclose the info in () //therefore, if '(' is not found... look for the last 'space'. if(!datahostptr) {datahostptr=strrchr(buffer,' '); eznos2=1;} //if that still fails... 'quit' //!!glennmcc: end if(!datahostptr) goto quit;//original line ptr=++datahostptr; { int carka=0; char *portptr=NULL; while(*ptr) { if(*ptr==',') { carka++; if(carka<4) *ptr='.'; else if(carka==4) { *ptr='\0'; portptr=ptr+1; } else if (carka==5) { *ptr='\0'; dataport=256*(word)atoi(portptr); // ,x,y -> 256*x+y portptr=ptr+1; //!!glennmcc: Nov 13, 2007 -- part of above fix for EZNO2 info not in () if(eznos2) dataport+=atoi(portptr); // ,x,y -> 256*x+y //!!glennmcc: end } } else if(*ptr==')' && portptr) { //!!glennmcc: Nov 11, 2007 -- some servers have double ')' // at the end of the port address info... // this 'dblp code' will prevent that from adding the final set twice //eg: (99,167,219,186,234,255)) instead of.... (99,167,219,186,234,255) //without this fix ... 255 gets added a 2nd time and //we end-up-with... port 60414 instead of the correct port of 60159 *ptr='\0'; if(!dblp)//!!glennmcc: Nov 11, 2007 dataport+=atoi(portptr); // ,x,y -> 256*x+y dblp=1;//!!glennmcc: Nov 11, 2007 } ptr++; } } if(!dataport) goto quit; //!!glennmcc: Aug 31, 2009 //EZNOS2 sends the IP of the machine on a router as datahost //therefore we need to go back to the original host if(eznos2) { makestr(datahost,url->host,79); outs(datahost); Piip(); } else //!!glennmcc:end makestr(datahost,datahostptr,79);//original line retry: if(isdir) { if(url->file[0]) { //!!glennmcc: Oct 15, 2007 -- fix problems with CWD on FTP servers //which interpret the leading '/' as an attempted CD to 'root' if(url->file[0]=='/') sprintf( str, "CWD %s", url->file+1); else //!!glennmcc: end Oct 15, 2007 sprintf( str, "CWD %s", url->file); sock_puts(socket,(unsigned char *)str); do { sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); //!!glennmcc: Apr 08, 2005 -- commented-out this block // to fix the problem of 'broken dir listing' when the // 'FTP welcome message' contains linefeeds // such as at ftp://ftp.cdrom.com/.2/simtelnet/ /* if ( *buffer != '2' && buffer[0]!=' ') { write(cache->handle,buffer,strlen(buffer)); rv=1; goto quit; } else if (buffer[3]=='-' || buffer[0]==' ') */ //!!glennmcc: end { strcat(buffer,"\r\n"); rv=1; write(cache->handle,buffer,strlen(buffer)); } } //!!glennmcc: Apr 08, 2005 -- added a test for !=' ' which is also // needed for the same fix at ftp://ftp.cdrom.com/.2/simtelnet/ while(buffer[3]=='-' || buffer[3]!=' ' || buffer[0]==' '); //continued message! // while(buffer[3]=='-' || buffer[0]==' '); //continued message! //!!glennmcc: end } strcpy(cache->mime,"ftp/list"); sprintf( str, "LIST"); } else { char *fnameptr; char mimestr[80]="ftp/binary"; fnameptr=strrchr(url->file,'/'); if(!fnameptr) { fnameptr=strrchr(url->file,'\\'); if(!fnameptr) fnameptr=url->file; else fnameptr++; } else fnameptr++; sprintf( str, "TYPE I"); if(fnameptr) { char ext[5]; strcpy(mimestr,"file/"); strncat(mimestr,fnameptr,70); mimestr[79]='\0'; get_extension(mimestr,ext); if(!strncmpi(ext,"TXT",3) || !strncmpi(ext,"HTM",3)) { //!!glennmcc: begin June 09, 2002 //optionally upload TXT and HTM in binary mode ptr=configvariable(&ARACHNEcfg,"UseBinaryFTP",NULL); if(!ptr || toupper(*ptr)=='N') //!!glennmcc: end sprintf( str, "TYPE A"); // ascii=1; } } strcpy(cache->mime,mimestr); sock_puts(socket,(unsigned char *)str); write(log,str,strlen(str)); write(log,"\r\n",2); sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); write(log,buffer,strlen(buffer)); write(log,"\r\n",2); // printf("FTP daemon said>"); // puts(buffer); if ( *buffer != '2' || uploadfile) { strcat(buffer,"\n"); write(cache->handle,buffer,strlen(buffer)); } if ( *buffer != '2' ) { rv=1; goto quit; } if(!uploadfile) //!!glennmcc: Oct 17, 2007 -- fix problems with FTP servers //which interpret the leading '/' as an attempted CD to 'root' if(url->file[0]=='/') sprintf( str, "RETR %s", url->file+1); else sprintf( str, "RETR %s", url->file); //original single line above this comment //!!glennmcc: end else sprintf( str, "STOR %s", url->file); } sock_puts(socket,(unsigned char *)str); write(log,str,strlen(str)); write(log,"\r\n",2); //!!glennmcc: Oct 19, 2008 -- back to original fix //!!glennmcc: Nov 15, 2007 -- always 'close' the connection when done //with both dir listings and file downloads //Apr 10, 2007 fix did it only for dir listings if(isdir || strstr(str,"RETR")) //if(isdir) sock_puts(socket,(unsigned char *)"QUIT");//!!glennmcc: Apr 10, 2007 //!!glennmcc: end if(!retry) { //get file using datahost & dataport GlobalLogoStyle=0; //SDL set resolve animation host=resolve_fn( datahost, (sockfunct_t) TcpIdleFunc ); //SDL // host=resolve( datahost ); if(!host) goto quit; GlobalLogoStyle=2; //SDL set connect animation if (!tcp_open( &datasocket, locport(), host, dataport, NULL )) { sprintf(str,msg_errcon,datahost); outs(str); goto quit; } sprintf(str,msg_con,datahost,dataport); outs(str); write(log,str,strlen(str)); write(log,"\r\n",2); //wait for datasocket to open: sock_wait_established(&datasocket, sock_delay, (sockfunct_t) TcpIdleFunc, &status); //SDL //!!glennmcc: Sep 27, 2008 -- increase D/L speed on cable & DSL //many thanks to 'mik' for pointing me in the right direction. :) { #ifdef DEBUG char sp[80]; sprintf(sp,"Available stack = %u bytes",_SP); outs(sp); Piip(); Piip(); #endif if(_SP>(1024*SETBUFSIZE)) { char setbuf[1024*SETBUFSIZE]; sock_setbuf(&datasocket, (unsigned char *)setbuf, 1024*SETBUFSIZE); } } //!!glennmcc: end GlobalLogoStyle=1; //SDL set data animation } //wait for "110 openning connection" (or "550 ....error....") sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); write(log,buffer,strlen(buffer)); write(log,"\r\n",2); // printf("FTP daemon said>"); // puts(buffer); if ( *buffer != '1' || uploadfile) { strcat(buffer,"\n"); write(cache->handle,buffer,strlen(buffer)); } if ( *buffer != '1' ) { if(!strncmp(buffer,"550",3) && !retry) { retry=1; isdir=1-isdir; if(isdir) strcat(url->file,"/"); else { int i=strlen(url->file); if(i>0 && url->file[i-1]=='/') url->file[i-1]='\0'; } goto retry; } strcpy(cache->mime,"text/plain"); rv=1; goto dataquit; } if(!uploadfile) //-------------------------------------- download --------------- { while ( 1 ) { xChLogoTICK(1); if(GUITICK()) if(GLOBAL.gotolocation || GLOBAL.abort) goto dataquit; if (sock_dataready( &datasocket )) { len = sock_fastread( &datasocket, (unsigned char*)buffer, BUFLEN ); write(cache->handle,buffer,len); total+=len; sprintf(str,MSG_BYTESR,MSG_DOWNLD,total); outs(str); } else sock_tick( &datasocket, &status ); //shift TCP/IP } } else //-------------------------------------- upload ------------------ { int f,lenread,done; long length; char pom[256]; /* if(ascii) f=a_sopen(uploadfile,O_RDONLY|O_TEXT, SH_DENYNO, S_IREAD); else*/ f=a_sopen(uploadfile,O_RDONLY|O_BINARY, SH_DENYNO, S_IREAD); if(f<0) goto dataquit; lenread=done=0; length=0l; { long filel=a_filelength(f); while(1) { sprintf(pom,MSG_UPLOAD,length,filel); outs(pom); //!!glennmcc:Oct 23, 2008 -- 'reversed the logic' // to keep from overflowing at 21megs if(filel>100) percentbar((int)(length/(filel/100))); // percentbar((int)(100*length/filel)); lenread=a_read(f,buffer,BUFLEN); length+=lenread; if(lenread<=0) done=1; //wait until we can write to socket: while(sock_tbleft(&datasocket)<lenread) //SDL // while( datasocket.datalen > 1024) { sock_tick(&datasocket,&status); xChLogoTICK(1); // animation of logo if(GUITICK()) goto dataquit; } if(done) { sock_close( &datasocket ); a_close(f); goto dataclose; } sock_fastwrite(&datasocket,(unsigned char *)buffer,lenread); sock_tick(&datasocket,&status); }//loop } } dataquit: //!!glennmcc: Nov 15, 2007 -- removed sock_abort because it was // sometimes preventing the connection from being closed, // therefore preventing access to several files within a short time // due to too many connections open from the same IP // sock_abort( &datasocket );//original line //!!glennmcc: end dataclose: outs(MSG_CLOSE); sock_puts(socket,(unsigned char *)"QUIT");//!!glennmcc: Dec 04, 2006 sock_wait_closed( &datasocket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL if(uploadfile) { sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); } quit: sock_puts(socket,(unsigned char *)"QUIT"); sock_close( socket ); closing[socknum]=1; sock_keepalive[socknum][0]='\0'; // sock_wait_closed( socket, sock_delay, NULL, &status ); //we will better wait because we are about to deallocate datasocket sock_err: switch (status) { case 1 : /* foreign host closed */ write(log,MSG_CLOSE,strlen(MSG_CLOSE)); write(log,"\r\n",2); close(log); break; case -1: /* timeout */ sprintf(str,MSG_TCPERR, sockerr(socket)); outs(str); write(log,str,strlen(str)); write(log,"\r\n",2); close(log); break; } if(total) { cache->knowsize=1; cache->size=total; rv=1; } if(cache->handle>=0) { a_close(cache->handle); rv=1; } return rv; }
void deal_with_data( int listnum /* Current item in connectlist for for loops */ ) { char buffer[80]; /* Buffer for socket reads */ char *s,s1[2],s2[2]; /* Used in processing buffer */ s=(char*)malloc(sizeof(char)*7); NamePass namep; NamePass *dt; char fileName[20]; int i=0,total=0; dt=(NamePass*)malloc(sizeof(NamePass)*100); if (sock_gets(connectlist[listnum],buffer,80) < 0) { /* Connection closed, close this end and free up entry in connectlist */ printf("\nConnection lost: FD=%d; Slot=%d\n", connectlist[listnum],listnum); close(connectlist[listnum]); for(i=0;i<indexMax;i++) { if(listUs[i].FD==connectlist[listnum]){ listUs[i].lost=0; } } connectlist[listnum] = 0; } else { /* We got some data, so upper case it and send it back. */ //printf("\nReceived: %s From: %d; ",buffer,connectlist[listnum]); /*cur_char = buffer; while (cur_char[0] != 0) { cur_char[0] = toupper(cur_char[0]); cur_char++; }*/ //buffer[strlen(buffer)-1]='\0'; if(checkRequestAns(buffer)==REQUEST) { printf("REQUEST PROCESSING.....\n"); strcpy(fileName,"demo.txt"); namep=cutNamePass(buffer); dt=getNamePassFromFile(fileName,&total); if(type==REGISTER) { if(compareForRegister(namep,dt,total)==1) { //printf("OK!REGISTERD\n"); strcpy(buffer,"OK!REGISTERD!"); registerToFile(fileName,namep); } else strcpy(buffer,"BAD!"); } else if(type==LOGIN) { if(compareForLogin(namep,dt,total)==1) { //printf("OK!LOGED IN\n"); strcpy(buffer,"OK!LOGED IN!"); listUs=userLogedIn(namep,connectlist[listnum],listUs,&indexMax); for(i=0;i<indexMax;i++) { printf("User: %s Lost %d",listUs[i].name,listUs[i].lost); } printf("\n"); } else // printf("BAD!\n"); strcpy(buffer,"BAD!"); } sock_puts(connectlist[listnum],buffer); sock_puts(connectlist[listnum],"\n"); sock_puts(connectlist[listnum],"Ready"); sock_puts(connectlist[listnum],"\n"); printf("Responded: %s",buffer); printf("To: %d \n",connectlist[listnum]); } else //ANS { strcpy(s,buffer); //ANS printf("\nANS: %s From %s\n",s,listUs[listnum].name); printf("For quetion %d\n",cqa); calculateMark(listnum,s,listQA[cqa]); } } }
int main(int argc, char *argv[]) { FILE *bron; int i,j,mid,sock,connected,withletters,nrexceptions=0; float letterratio; char classifyline[32768]; char word[1024]; char word2[1024]; char locap[1024]; char partlocap[1024]; char line[32768]; char buff[32768]; char feats[NRFEAT][1024]; char ***exceptions; char *part; char inflection,exception,locapmatch; // read exceptions bron=fopen(argv[1],"r"); fgets(line,32768,bron); while (!feof(bron)) { nrexceptions++; fgets(line,32768,bron); } fclose(bron); exceptions=malloc(nrexceptions*sizeof(char**)); bron=fopen(argv[1],"r"); for (i=0; i<nrexceptions; i++) { fscanf(bron,"%s %s ", word,word2); exceptions[i]=malloc(2*sizeof(char*)); exceptions[i][0]=malloc((strlen(word)+1)*sizeof(char)); exceptions[i][1]=malloc((strlen(word2)+1)*sizeof(char)); strcpy(exceptions[i][0],word); strcpy(exceptions[i][1],word2); } if (DEBUG2) fprintf(stderr,"read %d exception pairs from %s\n", nrexceptions,argv[1]); // process inst file // first, start up communications with the WOPR server ignore_pipe(); sock=make_connection(PORT,SOCK_STREAM,MACHINE); if (sock==-1) { fprintf(stderr,"the WOPR server is not responding\n"); exit(1); } else connected=1; mid=NRFEAT/2; bron=fopen(argv[2],"r"); fgets(line,32768,bron); while (!feof(bron)) { part=strtok(line," \n"); for (i=0; ((part!=NULL)&&(i<NRFEAT)); i++) { strcpy(feats[i],part); part=strtok(NULL," \n"); } strcpy(word,feats[mid]); if (!((strcmp(word,"<begin>")==0)|| (strcmp(word,"<end>")==0))) { fprintf(stdout,"%s", word); strcpy(locap,""); withletters=0; for (i=0; i<strlen(word); i++) { strcat(locap," "); if ((word[i]>='A')&&(word[i]<='Z')) locap[i]=word[i]+32; else locap[i]=word[i]; if ((locap[i]>='a')&&(locap[i]<='z')) withletters++; } letterratio=(1.*withletters)/(1.*strlen(word)); if (letterratio>0.5) { /* ignore_pipe(); sock=make_connection(PORT,SOCK_STREAM,MACHINE); if (sock==-1) { fprintf(stderr,"the WOPR server is not responding\n"); exit(1); } else connected=1; */ // call WOPR strcpy(classifyline,""); for (j=0; j<NRFEAT; j++) { if (j!=mid) { strcat(classifyline,feats[j]); strcat(classifyline," "); } } strcat(classifyline,word); strcat(classifyline,"\n"); if (DEBUG2) fprintf(stderr,"calling WOPR with %s", classifyline); sock_puts(sock,classifyline); sock_gets(sock,buff,sizeof(buff)); if (DEBUG2) fprintf(stderr,"getting back: %s\n", buff); part=strtok(buff,"\t\n"); while ((part!=NULL)&& (strcmp(part,"__EMPTY__")!=0)) { // special WOPR check exception=0; for (i=0; ((i<nrexceptions)&&(!exception)); i++) { if (((strcmp(word,exceptions[i][0])==0)&& (strcmp(part,exceptions[i][1])==0))|| ((strcmp(word,exceptions[i][1])==0)&& (strcmp(part,exceptions[i][0])==0))) { exception=1; if (DEBUG) fprintf(stderr,"WOPR caught an exception (%s %s) and will remain silent\n", word,part); } } // check: locap match? locapmatch=0; strcpy(partlocap,""); for (i=0; i<strlen(part); i++) { strcat(partlocap," "); if ((part[i]>='A')&&(part[i]<='Z')) partlocap[i]=part[i]+32; else partlocap[i]=part[i]; } if (strcmp(partlocap,locap)==0) locapmatch=1; // check: plural? inflection=0; if (!exception) { if ((((part[strlen(part)-1]=='s')&& (word[strlen(word)-1]!='s')))|| (((part[strlen(part)-1]!='s')&& (word[strlen(word)-1]=='s')))) inflection=1; if ((((part[strlen(part)-1]=='e')&& (word[strlen(word)-1]!='e')))|| (((part[strlen(part)-1]!='e')&& (word[strlen(word)-1]=='e')))) inflection=1; if ((((part[strlen(part)-1]=='n')&& (word[strlen(word)-1]=='t')))|| (((part[strlen(part)-1]=='t')&& (word[strlen(word)-1]=='n')))) inflection=1; } if ((!inflection)&& (!exception)&& (!locapmatch)&& (strlen(part)>MINLEN)) { fprintf(stdout," %s", part); fprintf(stderr,"WOPR corrects [%s] into [%s]\n", word,part); } part=strtok(NULL,"\t\n"); } //close(sock); } fprintf(stdout,"\n"); } fgets(line,32768,bron); } fclose(bron); close(sock); return 0; }
void vsyslog (int pri, const char *fmt, va_list ap) { char *p; char tbuffer [2048]; int left = sizeof(tbuffer); int saved_errno = errno; time_t t; #if 0 /* Check for invalid bits */ if (pri & ~(LOG_PRIMASK|LOG_FACMASK)) { syslog (INTERNALLOG, "syslog: unknown facility/priority: 0x%X", pri); pri &= (LOG_PRIMASK | LOG_FACMASK); } #endif /* Check priority against setlogmask values */ #if 0 if (!(LOG_MASK(LOG_PRI(pri)) & logMask)) return; #else if (!(LOG_UPTO(LOG_PRI(pri)))) return; #endif /* Set default facility if none specified */ if (!(pri & LOG_FACMASK)) pri |= logFacil; /* Build the message */ time (&t); p = tbuffer; p += _snprintk (p, left, "<%3d>%.15s ", pri, ctime(&t)+4); left -= p - tbuffer; if (logTag) { p += _snprintk (p, left, logTag); left -= p - tbuffer; } if (logStat & LOG_PID) { p += _snprintk (p, left, "[%d]", getpid()); left -= p - tbuffer; } if (logTag) { p += _snprintk (p, left, ": "); left -= p - tbuffer; } errno = errno_s = saved_errno; p += _vsnprintk (p, left, fmt, ap); if (*(p-1) != '\n') { *p++ = '\n'; *p = 0; } if (!logOpened) openlog (logTag, logStat | LOG_NDELAY, logFacil); if (logFile) _fputsk (tbuffer, logFile); if (logSock) { int len = sock_puts (logSock, (const BYTE*)tbuffer); const char *err = sockerr ((const tcp_Socket*)logSock); if (len == 0 || err) { sock_close (logSock); free (logSock); logSock = NULL; syslog (LOG_ERR, "UDP-write failed: %s\n", err); } } }
int xsendmail(struct Url *url, char helo, char logfile) { longword host; long length; //!!glennmcc: Feb 05, 2008 -- increased from 128 to 512 char str[512/*128*/],pom[512/*128*/]; //!!glennmcc Apr 30, 2004 -- for AuthSMTP char AuthSMTPusername[128]="",AuthSMTPpassword[128]=""; //!!glennmcc: end char buffer[BUFLEN]; struct ffblk ff; char filename[80]; int rv=0; //default return value == error int f,nomoremail; int done,lenread,i,j,lastcarka,carka,field,success,u,z; int status,err=0; char *ptr; int log; //!!glennmcc & Ray: Dec 14, 2006 int bcc=0; //!!glennmcc & Ray: end if(!tcpip) return 0; nomoremail=findfirst(&url->file[1],&ff,0); if(nomoremail) return 1; if(logfile) log= a_open( "SMTP.LOG" , O_BINARY|O_WRONLY|O_CREAT|O_TRUNC,S_IREAD|S_IWRITE ); else log=-1; free_socket(); //reset requests on IDENT port: reset_detected=0; tcp_listen(sock[1-socknum], 113, 0, 0, (dataHandler_t) resetport , 0); sprintf(str,msg_askdns,url->host); outs(str); GlobalLogoStyle=0; //SDL set resolve animation host = resolve_fn(url->host, (sockfunct_t) TcpIdleFunc); //SDL // host = resolve(url->host); if(!host) { DNSerr(url->host); return 0; } sprintf(str,msg_con,url->host,url->port); outs(str); GlobalLogoStyle=2; //SDL set connect animation if (!tcp_open( socket, locport(), host, url->port, NULL )) { sprintf(str,msg_errcon,url->host); outs(str); return 0; } sock_wait_established( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status); //SDL GlobalLogoStyle=1; //SDL set data animation sock_mode( socket, TCP_MODE_ASCII ); outs(MSG_SMTP); //wait for daemon to appear: do { sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); if(log!=-1) { write(log,buffer,strlen(buffer)); write(log,"\r\n",2); } if ( *buffer != '2' ) goto quit; } while(buffer[3]=='-'); //continued message! if(log!=-1 && reset_detected) { strcpy(str,MSG_IDENT); write(log,str,strlen(str)); write(log,"\r\n",2); } if(helo) // if(helo!=0) { //HELO protocol char *mydomain=strchr(url->user,'@'); if(mydomain) mydomain++; // xx@->yyy else //!!glennmcc: Feb 22, 2006 -- use host domain instead of user { mydomain=strchr(url->host,'.'); mydomain++; // xx@->yyy } // mydomain=url->user; //!!glennmcc: end //!!glennmcc: begin Nov 09, 2003 --- EHLO == Authenticated SMTP //finally finished it on Apr 30, 2004 ;-) if(helo==2) { //!!glennmcc: Feb 14, 2006 -- use 'authuser' for AuthSMTP mydomain=strrchr(url->authuser,'@'); if(mydomain) mydomain++; // xx@->yyy else //!!glennmcc: Feb 22, 2006 -- use host domain instead of authuser { mydomain=strchr(url->host,'.'); mydomain++; // xx@->yyy } // mydomain=url->authuser; //!!glennmcc: end sprintf( str, "EHLO %s", mydomain); outs(str); if(log!=-1) { write(log,str,strlen(str)); write(log,"\r\n",2); } sock_puts(socket,(unsigned char *)str); do { sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); if(log!=-1) { write(log,buffer,strlen(buffer)); write(log,"\r\n",2); } if ( *buffer != '2' ) goto quit; } while(buffer[3]=='-'); //continued message! sprintf( str, "AUTH LOGIN"); outs(str); if(log!=-1) { write(log,str,strlen(str)); write(log,"\r\n",2); } sock_puts(socket,(unsigned char *)str); do { sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); if(log!=-1) { write(log,buffer,strlen(buffer)); write(log,"\r\n",2); } if ( *buffer != '3' ) goto quit; } while(buffer[3]=='-'); //continued message! //!!glennmcc: Sept 17, 2004 // changed so that "email" will always get used for "mail from" // base64code((unsigned char *)url->user,AuthSMTPusername); base64code((unsigned char *)url->authuser,AuthSMTPusername); //!!glennmcc: end sprintf( str, AuthSMTPusername); outs(str); if(log!=-1) { write(log,str,strlen(str)); write(log,"\r\n",2); } sock_puts(socket,(unsigned char *)str); do { sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); if(log!=-1) { write(log,buffer,strlen(buffer)); write(log,"\r\n",2); } if ( *buffer != '3' ) goto quit; } while(buffer[3]=='-'); //continued message! //!!glennmcc: Feb 17, 2006 -- switch to new variable 'authpassword' base64code((unsigned char *)url->authpassword,AuthSMTPpassword); // base64code((unsigned char *)url->password,AuthSMTPpassword); sprintf( str, AuthSMTPpassword); outs(str); if(log!=-1) { write(log,str,strlen(str)); write(log,"\r\n",2); } sock_puts(socket,(unsigned char *)str); do { sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); if(log!=-1) { write(log,buffer,strlen(buffer)); write(log,"\r\n",2); } if ( *buffer != '2' ) goto quit; } while(buffer[3]=='-'); //continued message! } else //begin else HELO { //!!glennmcc: end sprintf( str, "HELO %s", mydomain); outs(str); if(log!=-1) { write(log,str,strlen(str)); write(log,"\r\n",2); } sock_puts(socket,(unsigned char *)str); do { sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); if(log!=-1) { write(log,buffer,strlen(buffer)); write(log,"\r\n",2); } if ( *buffer != '2' ) goto quit; } while(buffer[3]=='-'); //continued message! }//!!glennmcc: end of else HELO } //do for all messages while (!nomoremail) { //process msg body if(err) { outs("RSET"); if(log!=-1) { write(log,"RSET\r\n",6); } sock_puts(socket,(unsigned char *)"RSET"); do { sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); if(log!=-1) { write(log,buffer,strlen(buffer)); write(log,"\r\n",2); } if ( *buffer != '2' ) goto quit; //cannot reset ?? } while(buffer[3]=='-'); //continued message! err=0; } strcpy(filename,&url->file[1]); ptr=strrchr(filename,'\\'); if(ptr) ptr++; //point after "\" else ptr=filename; //current dir ? (not likelky case) strcpy(ptr,ff.ff_name); //open file f=a_fast_open(filename, O_TEXT|O_RDONLY,0); if(f<0) goto cont; //go to next message! //start SMTP sprintf( str, "MAIL FROM: <%s>", url->user); outs(str); if(log!=-1) { write(log,str,strlen(str)); write(log,"\r\n",2); } sock_puts(socket,(unsigned char *)str); do { sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); if(log!=-1) { write(log,buffer,strlen(buffer)); write(log,"\r\n",2); } if ( *buffer != '2' ) goto quit; //I am not accepted ?! } while(buffer[3]=='-'); //continued message! //process msg header done=lenread=j=lastcarka=carka=field=success=u=z=0; i=1; //force reading! do { if(i>=lenread) { lenread=a_read(f,buffer,BUFLEN); if(lenread<=0) done=1; i=0; } str[j]=buffer[i++]; if(str[j]=='\"')u=1-u; else if(str[j]=='(')z=1; else if(str[j]==')')z=0; else if(str[j]==',' && !u && !z)carka=1; if(j>=127 || str[j]=='\n' || carka || done) { str[j]='\0'; if(!str[0] && !lastcarka) //empty line -> end of message header { done=1; field=0; } else if(!strncmpi("TO:",str,3) || !strncmpi("CC:",str,3)) { ptr=&str[3]; field=1; } else if(!strncmpi("BCC:",str,4)) { //!!glennmcc & Ray: Dec 14, 2006 bcc=1; //!!glennmcc & Ray: end ptr=&str[4]; field=1; } else if(field && (lastcarka || str[0]==' ')) ptr=str; else field=0; if(field) { struct ib_editor expandlist; int rcpt; if(ptr[0]==' ' && ptr[1]=='@') //expand mailing list { makestr(expandlist.filename,&ptr[2],79); if(ie_openf(&expandlist,CONTEXT_TMP)==1) field=-1; else { field=0; expandlist.filename[0]='\0'; } } else expandlist.filename[0]='\0'; if(field!=0) rcpt=1; else rcpt=0; while(rcpt) { if(field==1) //address in ptr rcpt=0; else { ptr=ie_getline(&expandlist,expandlist.y++); if(expandlist.y>=expandlist.lines) { rcpt=0; field=0; } } cutaddress(ptr); if(*ptr) { //add SMTP recipient sprintf( pom, "RCPT TO: <%s>", ptr); outs(pom); if(log!=-1) { write(log,pom,strlen(pom)); write(log,"\r\n",2); } sock_puts(socket,(unsigned char *)pom); sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)pom, sizeof( pom )); outs(pom); if(log!=-1) { write(log,pom,strlen(pom)); write(log,"\r\n",2); } if(*pom == '2') success++; } }//loop if(expandlist.filename[0]) { ie_killcontext(CONTEXT_TMP); //clear temporary file // ie_closef(&expandlist); } }//end temp variables lastcarka=carka; carka=0; j=0; } else j++; } while(!done); if(!success) //cannot send to any recipient ? { err=1; goto cont; } //process msg body outs("DATA"); if(log!=-1) { write(log,"DATA\r\n",6); } sock_puts(socket,(unsigned char *)"DATA"); sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); if(log!=-1) { write(log,buffer,strlen(buffer)); write(log,"\r\n",2); } if ( *buffer != '3') { err=1; goto cont; //failed ? try next message! } a_lseek(f,0L,SEEK_SET); //reset file j=lenread=done=0; i=1; length=0; { long fll=a_filelength(f); do { if(i>=lenread) { sprintf(pom,MSG_SEND,length,fll); outs(pom); /* //!!glennmcc:Oct 23, 2008 -- 'reversed the logic' // to keep from overflowing at 21megs if(fll>100) percentbar((int)(length/(fll/100))); */ percentbar((int)(100*length/fll)); lenread=a_read(f,buffer,BUFLEN); length+=lenread; if(lenread<=0) done=1; i=0; // printf("\nlenread=%d \n",lenread); //!!glennmcc & Ray: Dec 14, 2006 -- bypass Bcc: if(bcc) { char *ptr = strstr(buffer, "Bcc:");//Ray if(ptr) { //Ray's method replaces the address(s) with spaces //it also looks for '\r' (carrage return) as the end of the Bcc line // ptr += 4; // PASS 'Bcc:' // while(*ptr && *ptr != '\r') // *ptr++ = ' '; //printf("After: \n\n%40s", ptr); getch(); // SEE THE RESULT //!!glennmcc: this method works better by 'nulling-out' the Bcc line and //looking for '\n' (new line) as the end of the Bcc line /* method #1 */ /**/ if(*ptr--=='\n')*ptr='\0';//remove previous '\r\n' if it exists do {*ptr='\0'; ptr++;} while( *ptr && *ptr!='\n'); /**/ /* end method #1 */ /* method *2 */ /* if(*ptr--=='\n')*ptr='\0';//remove previous '\r\n' if it exists while(*ptr && *ptr!='\n') *ptr++ ='\0'; *ptr='\0';//also remove this '\n' */ /* end method #2 */ bcc=0; } } //!!glennmcc & Ray: end } str[j]=buffer[i++]; //!!glennmcc: Feb 05, 2008 -- prevent character from being lost at line break //by breaking at a space instead of 127 explicitly //also increased line length limit to the next space past 200 //instead of just 127 explicitly if((j>=200 && str[j]==' ') || str[j]=='\n' || done) // if(j>=127 || str[j]=='\n' || done) //original line //!!glennmcc: end { str[j]='\0'; length++; //ASCI mode !!! //wait until we can write to socket: while(sock_tbleft(socket)<j+1) //SDL // while( socket->datalen > 1024) { sock_tick(socket,&status); xChLogoTICK(1); // animace loga if(GUITICK()) goto quit; } if (str[0]=='.') //SDL always double up sock_putc(socket,'.'); //SDL leading periods sock_puts(socket,(unsigned char *)str); if(log!=-1) { write(log,str,strlen(str)); write(log,"\r\n",2); } sock_tick(socket,&status); j=0; } else j++; } while(!done); } a_close(f); sock_puts(socket,(unsigned char *)"."); if(log!=-1) { write(log,".\r\n",3); } sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); if(log!=-1) { write(log,buffer,strlen(buffer)); write(log,"\r\n",2); } if ( *buffer != '2' ) { err=1; } else { //delete or rename ptr=strrchr(filename,'\\'); if(!ptr) ptr=filename; else ptr++; if(*ptr=='!') unlink(filename); else { strcpy(str,filename); ptr=strrchr(str,'.'); if(ptr) strcpy(&ptr[1],"SNT"); rename(filename,str); } }//endif cont: nomoremail=findnext(&ff); }//loop - next message rv=1; quit: outs("QUIT"); if(log!=-1) { write(log,"QUIT\r\n",6); close(log); } sock_puts(socket,(unsigned char *)"QUIT"); sock_close( socket ); closing[socknum]=1; sock_keepalive[socknum][0]='\0'; sock_err: switch (status) { case 1 : /* foreign host closed */ break; case -1: /* timeout */ sprintf(str,MSG_TCPERR, sockerr(socket)); outs(str); break; } return rv; }
static int get_headlines(char *rss_site,char *rss_page){ longword rss_server; //holds resolve(RSS_SERVER) int bytes_read,total_bytes; //for sock_fastread int count; tcp_Socket socket; //for comm char rssCode[6500]; //7kb max downloaded file limit unsigned int pos; char temp[500]; char* newStr; char otherStr[500]; printf("Fetching headlines...\n"); if (!tcp_tick(NULL)) { printf(" ! No network"); return 0; } //connect to the server if (!(rss_server = resolve(rss_site))) { printf(" ! Could not resolve host"); return 0; } if( !tcp_open(&socket,0,rss_server,HTTP_PORT,NULL)){ printf(" ! Unable to connect to remote server"); return 0; } //wait for the connection to be established while (!sock_established(&socket) && sock_bytesready(&socket)==-1){ tcp_tick(NULL); } printf(" connected! sending request\n"); //get the RSS code memset(rssCode,0,sizeof(rssCode)); //empty it first! sock_puts(&socket,"GET "); sock_puts(&socket,rss_page); sock_puts(&socket," HTTP/1.0\n"); sock_puts(&socket,"Accept: text/xml\nAccept: text/plain\nAccept: application/rss+xml\n\n"); sock_puts(&socket,"User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; m18) Gecko/20001108 Netscape6/6.0 \r\n\r\n"); total_bytes=0; do{ //this should be changed to parse as we receive each set of //bytes, so we don't need to waste 10k of memory with the big //rssCode array... bytes_read=sock_fastread(&socket,rssCode+total_bytes,sizeof(rssCode)-1-total_bytes); total_bytes+=bytes_read; } while(tcp_tick(&socket) && (total_bytes < sizeof(rssCode)-2)); printf(" Connection closed (received %d bytes)...\n",total_bytes); if(total_bytes<600) printf(rssCode); //parse out the headlines memset(headlines,0,sizeof(headlines)); strcat(headlines,"** "); newStr = strstr(rssCode,"<title>"); newStr = strstr(newStr,">"); count=0; while((newStr!= NULL)){ pos = strcspn(newStr,"<"); temp[0] = 0; strncat(temp,newStr,pos); substr(otherStr,temp,1,strlen(temp)); printf(" - \"%s\"\n",otherStr); //debug - print out the headline strcat(headlines,otherStr); strcat(headlines,"... "); newStr = strstr(newStr,"</title>"); newStr = strstr(newStr,"<title>"); newStr = strstr(newStr,">"); count++; } printf("Parsed out %d headlines.\n\n",count); return 1; }
int main(int argc, char *argv[]) { FILE *bron; float distweight[1024]; float total,max,threshold; int i,j,sock,connected,nrdist,counter,defcon,maxnr,result; char classifyline[32768]; char readbuffer[1024]; char locap[1024]; char buffer[NRFEAT][1024]; char membuffer[NRFEAT+3][1024]; char buff[32768]; char timblbuffer[1024]; char punc[NRFEAT][32]; char cap[1024]; char puncstring[1024]; char *part; char category[1024]; char realout[1024]; char capped,ready; ready=0; defcon=maxnr=connected=result=0; sscanf(argv[1],"%f",&threshold); if ((threshold<0.5)|| (threshold>1.0)) { fprintf(stderr,"[punc-recase_checker] ERROR: threshold value not between 0.5 and 1.0\n"); exit(1); } strcpy(puncstring,",.`'\"’‘!?:;()"); // process text file (not prefab inst!) // first, start up communications with the Timbl server ignore_pipe(); sock=make_connection(PORT,SOCK_STREAM,MACHINE); if (sock==-1) { fprintf(stderr,"the punc-recase server is not responding\n"); exit(1); } else connected=1; // cut off the Timbl welcome message sock_gets(sock,buff,sizeof(buff)-1); // cut off the Timbl base message sock_gets(sock,buff,sizeof(buff)-1); // tell the Timbl server to use the punc-recase base sprintf(timblbuffer,"base punc-recase\n"); sock_puts(sock,timblbuffer); // cut off the Timbl acknowledgement sock_gets(sock,buff,sizeof(buff)-1); // initialize buffers strcpy(cap,""); for (i=0; i<NRFEAT; i++) { strcpy(membuffer[i],"_"); strcpy(buffer[i],"_"); strcpy(punc[i],"NP"); strcat(cap," "); cap[i]='-'; } bron=fopen(argv[2],"r"); counter=0; while (!ready) { if (!feof(bron)) { result=fscanf(bron,"%s ", readbuffer); } else strcpy(readbuffer,"_"); /* if ((counter>(NRFEAT/2)-1)&& (defcon<=NRFEAT/2)) { fprintf(stdout,"%s", membuffer[(NRFEAT/2)-1]); if (DEBUG) fprintf(stderr,"original token: [%s]\n", membuffer[(NRFEAT/2)-1]); } */ for (i=NRFEAT; i>0; i--) strcpy(membuffer[i],membuffer[i-1]); strcpy(membuffer[0],readbuffer); if (strstr(puncstring,readbuffer)) { strcpy(punc[NRFEAT-1],readbuffer); } else { capped=0; if ((readbuffer[0]>='A')&& (readbuffer[0]<='Z')) capped=1; strcpy(locap,""); for (i=0; i<strlen(readbuffer); i++) { strcat(locap," "); if ((readbuffer[i]>='A')&& (readbuffer[i]<='Z')) locap[i]=readbuffer[i]+32; else locap[i]=readbuffer[i]; } for (i=0; i<NRFEAT-1; i++) { strcpy(buffer[i],buffer[i+1]); strcpy(punc[i],punc[i+1]); cap[i]=cap[i+1]; } strcpy(buffer[NRFEAT-1],locap); if (capped) cap[NRFEAT-1]='C'; else cap[NRFEAT-1]='-'; strcpy(punc[NRFEAT-1],"NP"); if (DEBUG) fprintf(stderr,"checking [%s]-[%c]-[%s]\n", buffer[(NRFEAT/2)], cap[(NRFEAT/2)], punc[(NRFEAT/2)]); if (counter>2) { //if (strcmp(punc[(NRFEAT/2)],"NP")==0) { if ((counter>(NRFEAT/2)-1)&& (defcon<=NRFEAT/2)) { fprintf(stdout,"%s", buffer[(NRFEAT/2)]); if (DEBUG) fprintf(stderr,"original token: [%s]\n", buffer[(NRFEAT/2)]); } if (DEBUG) { fprintf(stderr,"\nbuffer:"); for (i=0; i<NRFEAT; i++) fprintf(stderr," [%10s]", buffer[i]); fprintf(stderr,"\n"); fprintf(stderr,"cap: "); for (i=0; i<NRFEAT; i++) fprintf(stderr," [%10c]", cap[i]); fprintf(stderr,"\n"); fprintf(stderr,"punc: "); for (i=0; i<NRFEAT; i++) fprintf(stderr," [%10s]", punc[i]); fprintf(stderr,"\n"); } strcpy(classifyline,"c "); for (i=0; i<NRFEAT-1; i++) { strcat(classifyline,buffer[i]); strcat(classifyline," "); } if (strcmp(punc[2],"NP")!=0) { if (cap[3]!='-') { strcat(classifyline,punc[2]); strcpy(realout,punc[2]); strcat(classifyline,"C\n"); strcat(realout,"C"); } else { strcat(classifyline,punc[2]); strcpy(realout,punc[2]); strcat(classifyline,"\n"); } } else { if (cap[3]!='-') { strcat(classifyline,"C\n"); strcpy(realout,"C"); } else { strcat(classifyline,"-\n"); strcpy(realout,"-"); } } if (DEBUG) fprintf(stderr,"\ncalling Timbl with %s", classifyline); sock_puts(sock,classifyline); sock_gets(sock,buff,sizeof(buff)); if (DEBUG) fprintf(stderr,"getting back: %s\n", buff); part=strtok(buff," \n"); part=strtok(NULL," \n"); strcpy(category,""); for (j=1; j<strlen(part)-1; j++) { strcat(category," "); category[j-1]=part[j]; } while ((part!=NULL)&& (strcmp(part,"{")!=0)) part=strtok(NULL," \n"); if (part!=NULL) { nrdist=0; while ((part!=NULL)&& (strcmp(part,"}")!=0)) { part=strtok(NULL," \n"); if (strcmp(part,"}")!=0) { part=strtok(NULL," \n"); if (part[strlen(part)-1]==',') sscanf(part,"%f,",&distweight[nrdist]); else sscanf(part,"%f",&distweight[nrdist]); nrdist++; } } if (DEBUG) { fprintf(stderr,"distro of %d:", nrdist); for (i=0; i<nrdist; i++) fprintf(stderr," %.0f", distweight[i]); } max=0.0; maxnr=0; total=0.0; for (i=0; i<nrdist; i++) { total+=distweight[i]; if (distweight[i]>max) { max=distweight[i]; maxnr=i; } } if (DEBUG) fprintf(stderr," - max %6.3f certainty\n", (max/total)); if ((max/total>=threshold)&& // (max/total<1.0)&& (total>MINOCC)) { if ((strcmp(category,realout)!=0)&& (strcmp(category,"-")!=0)) { if (DEBUG) { fprintf(stderr,"line: %s", classifyline); fprintf(stderr,"we have to do something: predicted %s is not actual %s\n", category,realout); fprintf(stderr,"correction: [%s]\n", category); } fprintf(stdout," %s", category); } } } } if (strcmp(punc[NRFEAT/2],"NP")!=0) { if ((counter>(NRFEAT/2)-1)&& (defcon<=NRFEAT/2)) { fprintf(stdout,"\n%s", punc[(NRFEAT/2)]); if (DEBUG) fprintf(stderr,"original token: [%s]\n", punc[(NRFEAT/2)]); } } } if ((counter>(NRFEAT/2)-1)&& (defcon<=NRFEAT/2)) { fprintf(stdout,"\n"); if (DEBUG) fprintf(stderr,"\n"); } } if (feof(bron)) defcon++; if (defcon>(NRFEAT/2)) ready=1; counter++; } fclose(bron); close(sock); return 0; }
int main(int argc, char *argv[]) { FILE *bron; float distweight[1024]; char word1[1024]; char capword1[1024]; char word2[1024]; char capword2[1024]; float total,max,threshold; int i,j,mid,sock,connected,nrdist,maxnr; char classifyline[32768]; char line[32768]; char buff[32768]; char buffer[1024]; char feats[NRFEAT][1024]; char *part; char category[1024]; char match; strcpy(word1,argv[1]); strcpy(capword1,word1); capword1[0]-=32; strcpy(word2,argv[2]); strcpy(capword2,word2); capword2[0]-=32; sscanf(argv[3],"%f",&threshold); if ((threshold<0.5)|| (threshold>1.0)) { fprintf(stderr,"[confusible_checker] ERROR: threshold value not between 0.5 and 1.0\n"); exit(1); } // process inst file // first, start up communications with the Timbl server ignore_pipe(); sock=make_connection(PORT,SOCK_STREAM,MACHINE); if (sock==-1) { fprintf(stderr,"the confusible server is not responding\n"); exit(1); } else connected=1; // cut off the Timbl welcome message sock_gets(sock,buff,sizeof(buff)-1); // cut off the Timbl base message sock_gets(sock,buff,sizeof(buff)-1); // tell the Timbl server to use the word1-word2 base sprintf(buffer,"base %s-%s\n", word1,word2); sock_puts(sock,buffer); // cut off the Timbl acknowledgement sock_gets(sock,buff,sizeof(buff)-1); mid=NRFEAT/2; bron=fopen(argv[4],"r"); fgets(line,32768,bron); while (!feof(bron)) { part=strtok(line," \n"); for (i=0; ((part!=NULL)&&(i<NRFEAT)); i++) { strcpy(feats[i],part); part=strtok(NULL," \n"); } if (!((strcmp(feats[mid],"<begin>")==0)|| (strcmp(feats[mid],"<end>")==0))) { match=0; if ((strcmp(feats[mid],word1)==0)|| (strcmp(feats[mid],capword1)==0)|| (strcmp(feats[mid],word2)==0)|| (strcmp(feats[mid],capword2)==0)) match=1; fprintf(stdout,"%s", feats[mid]); if (match) { // call Timbl strcpy(classifyline,"c "); for (j=0; j<NRFEAT; j++) { if (j!=mid) strcat(classifyline,feats[j]); strcat(classifyline," "); } strcat(classifyline,"?\n"); if (DEBUG) fprintf(stderr,"\ncalling Timbl with %s", classifyline); sock_puts(sock,classifyline); sock_gets(sock,buff,sizeof(buff)); if (DEBUG) fprintf(stderr,"getting back: %s\n", buff); part=strtok(buff," \n"); part=strtok(NULL," \n"); strcpy(category,""); for (j=1; j<strlen(part)-1; j++) { strcat(category," "); category[j-1]=part[j]; } while ((part!=NULL)&& (strcmp(part,"{")!=0)) part=strtok(NULL," \n"); if (part!=NULL) { nrdist=0; while ((part!=NULL)&& (strcmp(part,"}")!=0)) { part=strtok(NULL," \n"); if (strcmp(part,"}")!=0) { part=strtok(NULL," \n"); if (part[strlen(part)-1]==',') sscanf(part,"%f,",&distweight[nrdist]); else sscanf(part,"%f",&distweight[nrdist]); nrdist++; } } if (DEBUG) { fprintf(stderr,"distro of %d:", nrdist); for (i=0; i<nrdist; i++) fprintf(stderr," %.0f", distweight[i]); } max=0.0; total=0.0; for (i=0; i<nrdist; i++) { total+=distweight[i]; if (distweight[i]>max) { max=distweight[i]; maxnr=i; } } if (DEBUG) fprintf(stderr," - max %6.3f certainty\n", (max/total)); if ((max/total>=threshold)&& (max/total<1.0)&& (total>MINOCC)) { if (strcmp(category,feats[mid])!=0) { fprintf(stdout," %s%6.3f", category,(max/total)); fprintf(stderr,"corrected %s into %s\n", feats[mid],category); } } } } fprintf(stdout,"\n"); } fgets(line,32768,bron); } fclose(bron); close(sock); return 0; }
int main(int argc, char **argv) { /*Set default values for tty device, server port and background operation*/ char ttydev[1024]; strncpy(ttydev, "/dev/ttyS0", 1023); char serverport[1024]; strncpy(serverport, "3376", 1023); int auth = FALSE; int verbose = FALSE; /*Find options on the commandline*/ int c; extern char *optarg; while ((c = getopt(argc, argv, "s:p:dv")) != -1) { switch(c) { case 's': strncpy(ttydev, optarg, 1023); break; case 'p': strncpy(serverport, optarg, 1023); break; case 'd': background = TRUE; break; case 'a': auth = TRUE; break; case 'v': verbose = TRUE; break; case '?': print_usage(); } } /*open camera interface*/ VISCA_open_interface(&interface, &camera, ttydev); /*Set up some signal handling*/ ignore_pipe(); struct sigaction sa; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; sa.sa_handler = sig_chld; sigaction(SIGCHLD, &sa, NULL); sa.sa_handler = sig_abort; sigaction(SIGINT, &sa, NULL); sigaction(SIGQUIT, &sa, NULL); sigaction(SIGTERM, &sa, NULL); /*initialize network stuff - taken from socket-faq*/ int port = -1; port = atoport(serverport, "tcp"); if (port == -1) { fprintf(stderr,"Unable to find service: %s\n",serverport); exit(1); } /*check for lock file*/ struct stat tempstat; if (stat("/var/lock/visca-daemon.lock", &tempstat) == 0) { fprintf(stderr, "Lockfile /var/lock/visca-daemon.lock exists\nMaybe another visca-daemo is running already?\n\n"); exit(1); } /*go to background if the user wants us to*/ if (background == TRUE) { if(daemon(0,0) != 0) { fprintf(stderr,"Unable to detach from console\n"); exit(1); } openlog("visca-daemon", 0, LOG_DAEMON); } mknod("/var/lock/visca-daemon.lock", S_IFREG, 0); if (background == TRUE) { syslog(LOG_INFO, "Visca Camera daemon started.\n"); } else { fprintf(stderr, "Visca Camera daemon started.\n"); } /*Wait for a client to make connections*/ /*forking is handled by sockhelp.c from the socket-faq*/ int sock = get_connection(SOCK_STREAM, port, &listensock); connectsock = sock; if (background == TRUE) { syslog(LOG_INFO, "New connection established\n"); } else { fprintf(stderr, "New connection established\n"); } /*Greet the user*/ char buffer[1024]; sock_puts(sock,"Welcome to the VISCA camera server\n"); int connected = 1; int errorcode; int ret1, ret2, ret3; while (connected) { /* Read input */ if (sock_gets(sock, buffer, 1024) < 0) { connected = 0; } else if (buffer[0]=='\0') { connected = 0; } else { if (verbose == TRUE) { if (background == TRUE) { syslog(LOG_INFO, "Command received: %s\n", buffer); } else { fprintf(stderr, "Command received: %s\n", buffer); } } errorcode = VISCA_doCommand(buffer, &ret1, &ret2, &ret3, &interface, &camera); switch(errorcode) { case 10: snprintf(buffer, 1023, "10 OK - no return value\n"); break; case 11: snprintf(buffer, 1023, "11 OK - one return value\nRET1: %i\n", ret1); break; case 12: snprintf(buffer, 1023, "12 OK - two return values\nRET1: %i\nRET2: %i\n", ret1, ret2); break; case 13: snprintf(buffer, 1023, "13 OK - three return values\nRET1: %i\nRET2: %i\nRET3: %i\n", ret1, ret2, ret3); break; case 40: snprintf(buffer, 1023, "40 ERROR - command not recognized\n"); break; case 41: snprintf(buffer, 1023, "41 ERROR - argument 1 not recognized\n"); break; case 42: snprintf(buffer, 1023, "42 ERROR - argument 2 not recognized\n"); break; case 43: snprintf(buffer, 1023, "43 ERROR - argument 3 not recognized\n"); break; case 44: snprintf(buffer, 1023, "44 ERROR - argument 4 not recognized\n"); break; case 45: snprintf(buffer, 1023, "45 ERROR - argument 5 not recognized\n"); break; case 46: snprintf(buffer, 1023, "46 ERROR - camera replied with an error\n"); break; case 47: snprintf(buffer, 1023, "47 ERROR - camera replied with an unknown return value\n"); break; default: snprintf(buffer, 1023, "unknown error code: %i\n", errorcode); } if (verbose == TRUE) { if (background == TRUE) { syslog(LOG_INFO, "Answer sent: %s", buffer); } else { fprintf(stderr, "Answer sent: %s", buffer); } } if (sock_puts(sock, buffer) < 0) { connected = 0; } } } if (background == TRUE) { syslog(LOG_INFO, "Connection closed\n"); } else { fprintf(stderr, "Connection closed\n"); } close(sock); return 0; }
int popdump( char *userid, char *password, longword host) /*, char *hoststring, char *dumpfile) /* 94.11.19 -- removed extra params */ { tcp_Socket *s; int status; /* int len; */ /* char *p; */ long process = 0, count, totallength, locallength, dummy; /* FILE *f; */ s = &popsock; if (!tcp_open( s, 0, host, POP3_PORT, NULL )) { puts("Sorry, unable to connect to that machine right now!"); return (1); } printf("waiting...\r"); sock_mode( s, TCP_MODE_ASCII ); sock_wait_established(s, sock_delay, NULL, &status); sock_wait_input( s, sock_delay, NULL, &status ); sock_gets( s, buffer, sizeof( buffer )); puts(buffer); if ( *buffer != '+' ) goto quit; sock_printf( s, "USER %s", userid); sock_wait_input( s, sock_delay, NULL, &status ); sock_gets( s, buffer, sizeof( buffer )); puts(buffer); if ( *buffer != '+' ) goto quit; sock_printf( s, "PASS %s", password ); sock_wait_input( s, sock_delay, NULL, &status ); sock_gets( s, buffer, sizeof( buffer )); puts(buffer); if ( *buffer != '+' ) goto quit; sock_printf(s, "STAT"); printf("STAT\n"); sock_wait_input( s, sock_delay, NULL, &status ); sock_gets( s, buffer, sizeof( buffer )); puts(buffer); if ( *buffer != '+' ) goto quit; /* it must return two valid numbers */ if ( getnumbers( buffer, &count, &totallength ) < 2 ) { printf("protocol error on STAT\n"); goto quit; } printf("Attempting to download %lu messages (%lu bytes)\n", count, totallength ); while ( process++ < count ) { printf("Getting file # %lu\n", process ); sock_printf( s, "LIST %lu", process ); sock_wait_input( s, sock_delay, NULL, &status ); sock_gets( s, buffer, sizeof( buffer )); if ( getnumbers( buffer, &dummy, &locallength ) < 2 ) { printf("protocol error on LIST %lu\n", process ); goto quit; } if ( localdiskspace() < locallength * 2 ) { printf("Skipping file # %lu, too big for disk space available\n", process ); continue; } sock_printf( s, "RETR %lu", process ); sock_wait_input( s, sock_delay, NULL, &status ); sock_gets( s, buffer, sizeof( buffer )); if (*buffer != '+' ) goto quit; /* sprintf( buffer, "%s%s%lu.mai", dumpfile, dumpfile ? "\\":".\\", index if (( f = fopen( dumpfile , "wt" )) == NULL ) { printf("Unable to open %s\n", dumpfile ); return; } */ do { sock_wait_input( s, sock_delay, NULL, &status ); sock_gets( s, buffer, sizeof( buffer )); puts( buffer ); } while ( buffer[0] != '.' || buffer[1] != 0 ); sock_printf(s,"DELE %lu", process ); sock_wait_input( s, sock_delay, NULL, &status ); sock_gets( s, buffer, sizeof( buffer )); puts(buffer); if ( *buffer != '+' ) goto quit; } quit: sock_puts(s,"QUIT"); sock_close( s ); sock_wait_closed( s, sock_delay, NULL, &status ); sock_err: switch (status) { case 1 : /* foreign host closed */ break; case -1: /* timeout */ printf("ERROR: %s\n", sockerr(s)); break; } printf("\n"); return ( (status == -1) ? 2 : status ); }