Example #1
0
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);
	}
}
Example #2
0
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) */
}
Example #3
0
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);
}
Example #4
0
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);
}
Example #5
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;
}
Example #6
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;
}
Example #7
0
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]);
		  }
		  
	}
}
Example #8
0
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;
}
Example #9
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);
    }
  }
}
Example #10
0
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;
}
Example #11
0
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;
}
Example #12
0
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;
}
Example #13
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;
}
Example #14
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;
}
Example #15
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 );
}