void Smart_ggiFlush(void)
{
 struct timeval tv_current;

 gettimeofday(&tv_current,NULL);

 if(Smart_ggiFlush_maxusec==0)
 {
  char *ptr=configvariable(&ARACHNEcfg,"GGI_MaxFrameRate",NULL);
  if(ptr)
   Smart_ggiFlush_maxusec=atoi(ptr);
  if(!ptr || Smart_ggiFlush_maxusec<=0 || Smart_ggiFlush_maxusec>100)
    Smart_ggiFlush_maxusec=10;
  Smart_ggiFlush_maxusec=1000000/ Smart_ggiFlush_maxusec;
 }

 if(tv_current.tv_sec!=tv_lastflush.tv_sec ||
   tv_current.tv_usec-tv_lastflush.tv_usec>Smart_ggiFlush_maxusec)
 {
  ggiFlush(ggiVis);
  tv_lastflush.tv_sec=tv_current.tv_sec;
  tv_lastflush.tv_usec=tv_current.tv_usec;
  Forced_ggiFlush_request=0;
 }
 else
  Forced_ggiFlush_request=1;
}
 //initialize mouse
int ImouseIni( int xmin, int ymin, int xmax, int ymax,
		int xstart, int ystart)
{
#ifdef GGI
 xg_mouserange_xmin=xmin;
 xg_mouserange_xmax=xmax;
 xg_mouserange_ymin=ymin;
 xg_mouserange_ymax=ymax;
 return 1;
#else
 mouse_init("/dev/mouse",vga_getmousetype(),10);

 {
  int mscale=60;
  char *ptr=configvariable(&ARACHNEcfg,"SVGAlib_MouseScale",NULL);
  if(ptr)
   mscale=atoi(ptr);
  mouse_setscale(mscale);
 }

 mouse_setxrange(xmin,xmax);
 mouse_setyrange(ymin,ymax);
 mouse_setposition(xstart,ystart);
 return 1;
#endif
}
Beispiel #3
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 MemInfo(char forced)
{
#ifndef TEXTONLY
    char str[30];
    unsigned long ldsp;
    int y=endvtoolbar();
    int color;
    long value;

    if(forced && meminfovisible)
    {
        if(arachne.framescount)
        {
            p->activeframe=0;
            redrawHTML(REDRAW_NO_MESSAGE,REDRAW_CREATE_VIRTUAL);
        }
        else
            redrawHTML(REDRAW_WITH_MESSAGE,REDRAW_VIRTUAL);
        meminfovisible=0;
        return;
    }

    if((x_maxx()<640 || arachne.GUIstyle ||
            fullscreen || customerscreen || fixedfont) /*fixedfont=printing hack*/
            && !forced) return;

    if(arachne.GUIstyle)
        meminfovisible=1;

    mouseoff();
    y+=2;
    Box3D(x_maxx()-150,y,x_maxx()-1,x_maxy()-17);
    y+=1;
    htmlfont(0,NORMAL);

    if(forced && lastinfo && endvtoolbar()>=x_maxy()-14*(fonty(0,NORMAL)-1))
        goto moreinfo;

#ifndef POSIX
//DOS memory
    value=farcoreleft();//>>10; //!!glennmcc Oct 09, 2004 don't round off to KB
    sprintf(str,"%4lu",value);
    if(value<50000l || memory_model==0)
    {
        color=2;
        strcat(str,"[!!!]");
    }
    else if(memory_model==2)
    {
        color=3;
        strcat(str,"[+]");
    }
    else
    {
        color=0;
        strcat(str,"[?]");
    }
    MemInfoLine("Dos mem",str,color,&y);//!!glennmcc Oct 09, 2004 don't round off to KB

//XMS used
    sprintf(str,"%5lu",mem_all_xmem());
    MemInfoLine("Used XMS (KB)",str,0,&y);
#endif//posix

//XSWAP free
    ldsp=ie_free()>>10;
    sprintf(str,"%4ld",ldsp);
    if(ldsp<500)
    {
        color=2;
        strcat(str,"[!!!]");
    }
    else
        color=0;
    MemInfoLine("Free xSwap (KB)",str,color,&y);

//XSWAP used
    sprintf(str,"%4ld",ie_used()>>10);
    MemInfoLine("Used xSwap (KB)",str,0,&y);

#ifndef POSIX
//disk space
//!!glennmcc: Nov 25, 2005 -- check space on the cache drive
//and the current drive .... display both when not the same drive
//when cache is on local drive, display only one
#ifndef NOKEY
    {
        ldsp=lastdiskspace(configvariable(&ARACHNEcfg,"CachePath",NULL))>>20;
//local & cache
        /**/
        if(ldsp==(localdiskspace()>>20))
            sprintf(str,"%4lu",ldsp);
        else
            sprintf(str,"%4lu %4lu",localdiskspace()>>20,ldsp);
        /**/
//temp & cache
        /*
         if(ldsp==(lastdiskspace(getenv("TEMP"))>>20))
         sprintf(str,"cache_%4lu",ldsp);
         else
         sprintf(str,"temp_%4lu cache_%4lu",lastdiskspace(getenv("TEMP"))>>20,ldsp);
        */
    }
int protocol_arachne(struct HTTPrecord *cacheitem,struct Url *url,int *returnvalue)
{
 char *value;
#ifndef NOTCPIP
#ifndef CLEMTEST
  if(!strncmpi(url->file,"ftp-",4))
  {
   char back=1;

   if(!strncmpi(&(url->file[4]),"send",4))
    back=0;

   strcpy(url->user,configvariable(&ARACHNEcfg,"FTPusername",NULL));
   strcpy(url->password,configvariable(&ARACHNEcfg,"FTPpassword",NULL));
   strcpy(url->host,configvariable(&ARACHNEcfg,"FTPserver",NULL));
   strcpy(url->file,configvariable(&ARACHNEcfg,"FTPpath",NULL));
   url->port=21;

   if(tcpip)
    ftpsession(url,cacheitem,LASTlocname);

   if(!GLOBAL.gotolocation)
   {
    if(back)
     goback();
    else
     strcpy(GLOBAL.location,p->htmlframe[p->activeframe].cacheitem.URL);
    arachne.target=p->activeframe;
   }

   GLOBAL.reload=0;
   GLOBAL.postdata=0;
   return GOTO_IVEGOTNEWURL;
  }
#endif
#endif
#ifndef POSIX
  if(!strcmpi(url->file,"restart"))
  {
   char buf[IE_MAXLEN];
   char *ptr=getenv("ASETUP");

   if(ptr && !strcmp(ptr,"inst"))  //special case - "Finish Setup" button
    return GOTO_USEREND;

   arachne.target=0; //!!!
   strcpy(buf,"@arachne");
   if(tcpip)
    strcat(buf," -o\n");
   else
    strcat(buf,"\n");
   unlink("lock");
   *returnvalue=willexecute(buf);
   return GOTO_END;
  }
  else
#endif
 ///!!!!
 ///POSIX restart: TerminateArachne + exec.. (argv[0],argv[0],NULL) !
#ifndef NOTCPIP
  if(!strcmpi(url->file,"dialpage"))
  {
   value=configvariable(&ARACHNEcfg,"DialPage",NULL);

//!!glennmcc: Begin Feb 06, 2005 -- default to ppp_init.htm
//if 'DialPage' is missing from arachne.cfg
if(!value) value="file:ppp_init.htm";
//also use ppp_init.htm if DialPage does not begin with file:ppp
//indicating that it has been changed from one of the 4 included dialpages
//which are... ppp_init.htm, pppenhan.htm, pppframe.htm or ppp_fast.htm
//value=strlwr(value);
if(!strstr(value,"file:ppp")) value="file:ppp_init.htm";
//!!glennmcc: end

   if(value)
   {
    strcpy(GLOBAL.location,value);
    AnalyseURL(GLOBAL.location,url,IGNORE_PARENT_FRAME);
   }
  }
  else
#ifndef CLEMTEST
  if(!strcmpi(url->file,"dialer"))
  {
   *returnvalue=willexecute(ArachneDIAL());
   return GOTO_END;
  }
  else
  if(!strcmpi(url->file,"hangup"))
  {
   char buf[IE_MAXLEN];
   arachne.target=0; //!!!
   outs(MSG_HANGUP);
   if(reg && tcpip)
    PPPtimelog();
   process_form(0,IE_NULL); //updateovat Arachne.Cfg
   sprintf(buf,"%s\nif exist PPP.LOG del PPP.LOG\n",configvariable(&ARACHNEcfg,"Hangup",NULL));
   value=configvariable(&ARACHNEcfg,"ExitOnHangup",NULL);
   if(!(value && toupper(*value)=='Y'))
    strcat(buf,"@arachne -c\n");
   else
    exitmsg();
   *returnvalue=willexecute(buf);
   return GOTO_END;
  }
  else
#endif
#endif //NOTCPIP
  if(!strncmpi(url->file,"exit",4))
  {
   if(url->file[4]=='=' || url->file[4]=='?')
    *returnvalue=atoi(&(url->file[5]));
   return GOTO_USEREND;
  }
 return 0;
}
int protocol_nohttp(struct HTTPrecord *cacheitem,struct Url *url, unsigned *cacheitem_status, XSWAP *cacheitem_writeadr)
{
 char *value;

#ifndef CLEMTEST
#ifdef OVRL
#ifndef XTVERSION
 //---------------------------------------------------------------- finger:
 if(!strcmpi(url->protocol,"finger"))
 //------------------------------------------------------------------------
 {
  //finger to cache
  *cacheitem_writeadr=Write2Cache(url,cacheitem,1,1);
  strcpy(cacheitem->mime,"finger/out");
  if(xfinger(url,cacheitem,url->user))
  {
   if(GLOBAL.abort)
    return GOTO_ABORT;
   UpdateInCache(*cacheitem_writeadr,cacheitem);
   *cacheitem_status=REMOTE;
  }
  else
  {
   GLOBAL.reload=0;
   return GOTO_ABORT;
  }
 }
 else if(!strcmpi(url->protocol,"news") ||
         !strcmpi(url->protocol,"nntp") )
 {
  //finger to cache
  *cacheitem_writeadr=Write2Cache(url,cacheitem,1,1);

  if(!url->host[0])
  {
   value=configvariable(&ARACHNEcfg,"NNTPserver",NULL);
   if(value)
   {
    makestr(url->host,value,STRINGSIZE-1);
   }
  }

  if(!url->file[0] || url->file[0]=='/' && !url->file[1])
   strcpy(url->file,"LIST");

  strcpy(cacheitem->mime,"news/list");
  if(xfinger(url,cacheitem,url->file))
  {
   if(GLOBAL.abort)
    return GOTO_ABORT;
   UpdateInCache(*cacheitem_writeadr,cacheitem);
   *cacheitem_status=REMOTE;
  }
  else
  {
   GLOBAL.reload=0;
   return GOTO_ABORT;
  }
 }
 //---------------------------------------------------------------- gopher:
 else if(!strcmpi(url->protocol,"gopher"))
 //------------------------------------------------------------------------
 {
  char *selector;
  char dummy[IE_MAXLEN+1];

  int plugin=externalprotocol(url->protocol,dummy);
  if(plugin)
   return GOTO_EXTERNAL;

  //finger to cache
  *cacheitem_writeadr=Write2Cache(url,cacheitem,1,1);

  selector=&(url->file[1]);
  if(!url->file[1])
  {
   strcpy(cacheitem->mime,"gopher/1");
  }
  else if(url->file[2]=='/')
  {
   sprintf(cacheitem->mime,"gopher/%c",url->file[1]);
   if(url->file[1]=='7' && !strchr(url->file,'?')) //search
    return GOTO_TRYPLUGIN;
   selector=&(url->file[3]);
  }

  if(xfinger(url,cacheitem,selector))
  {
   if(GLOBAL.abort)
    return GOTO_ABORT;
   UpdateInCache(*cacheitem_writeadr,cacheitem);
   *cacheitem_status=REMOTE;
  }
  else
  {
   GLOBAL.reload=0;
   return GOTO_ABORT;
  }
 }
 else
#endif //XTVERSION
#endif //statical version
 //------------------------------------------------------------------- ftp:
 if(!strcmpi(url->protocol,"ftp"))
 //------------------------------------------------------------------------
 {
  char *ptr;
  char dummy[IE_MAXLEN+1];
  int plugin=externalprotocol(url->protocol,dummy);
  if(plugin)
   return GOTO_EXTERNAL;

  if(url->user[0] && !url->password[0] &&
     (strcmp(url->host,AUTHENTICATION->host) ||
      strcmp(url->user,AUTHENTICATION->user) ||
      strcmp(AUTHENTICATION->realm,"$ftp")))
  {
   sprintf(cacheitem->locname,"%s%sftplogin.ah",sharepath,GUIPATH);
   strcpy(AUTHENTICATION->host,url->host);
   return GOTO_LOCAL_HTML;
  }

  ptr=configvariable(&ARACHNEcfg,"UseFTPproxy",NULL);
  if(ptr && toupper(*ptr)!='N')
  {
   char *no4all=configvariable(&ARACHNEcfg,"NoFTPproxy4all",NULL);
   ptr=configvariable(&ARACHNEcfg,"NoFTPproxy",NULL);
   if((!ptr || !strstr(strlwr(ptr),strlwr(url->host) )) &&
      (!no4all || !strstr(strlwr(url->host), strlwr(no4all)) ) )
    return GOTO_PROXY;
  }

  //ftp to cache
  *cacheitem_writeadr=Write2Cache(url,cacheitem,1,1);

  if(ftpsession(url,cacheitem,NULL))
  {
   if(GLOBAL.abort)
    return GOTO_ABORT;
   UpdateInCache(*cacheitem_writeadr,cacheitem);
   *cacheitem_status=REMOTE;
  }
  else
  {
   GLOBAL.reload=0;
   return GOTO_ABORT;
  }
 }
 //------------------------------------------------------------------ pop3:
 else if(!strcmpi(url->protocol,"pop3"))
 //------------------------------------------------------------------------
 {
  char dele=1,log=0;

  if(!url->host[0])
  {
   value=configvariable(&ARACHNEcfg,"POP3server",NULL);
   if(value)
    makestr(url->host,value,STRINGSIZE-1);
  }
  if(!url->user[0])
  {
   value=configvariable(&ARACHNEcfg,"POP3username",NULL);
   if(value)
    makestr(url->user,value,STRINGSIZE-1);
  }

  //Draw title and URL (without password):

  MakeTitle(MSG_MAILDL);
  url2str(url,GLOBAL.location);
  SetInputAtom(&URLprompt,GLOBAL.location);
  DrawTitle(0);
  add2history(GLOBAL.location);

  //Get password and other settings:

  if(!url->password[0])
  {
   value=configvariable(&ARACHNEcfg,"POP3password",NULL);
   if(value)
    makestr(url->password,value,PASSWORDSIZE-1);
  }

  value=configvariable(&ARACHNEcfg,"KeepOnServer",NULL);
  if(value && toupper(*value)=='Y') dele=0;

  value=configvariable(&ARACHNEcfg,"POP3log",NULL);
  if(value && toupper(*value)=='Y') log=1;

  //POP3 download is performed here:

  if(!xpopdump(url,dele,log))
  {
   sprintf(p->htmlframe[0].cacheitem.locname,"%s%serr_pop3.ah",sharepath,GUIPATH);
   return GOTO_ERROR;
  }
  else if(arachne.scriptline==0)
  {
   value=configvariable(&ARACHNEcfg,"AfterPOP3",NULL);
   if(!value)
    strcpy(GLOBAL.location,"file://inbox.dgi");
   else
    strcpy(GLOBAL.location,value);
   GLOBAL.reload=RELOAD_CURRENT_LOCATION;
   return GOTO_IVEGOTNEWURL;
  }
  else
   return GOTO_READSCRIPT;
 }
 //------------------------------------------------------------------ smtp:
 else if(!strcmpi(url->protocol,"smtp"))
 //------------------------------------------------------------------------
 {
  char helo=1,log=0;

  if(!url->host[0])
  {
   value=configvariable(&ARACHNEcfg,"SMTPserver",NULL);
   if(value)
    makestr(url->host,value,STRINGSIZE-1);
  }

//!!glennmcc: Feb 13, 2006 -- 'SendHelo' is more logical ;-)
  value=configvariable(&ARACHNEcfg,"SendHELO",NULL);
  if(!value || toupper(*value)!='N') helo=1; else helo=0;
//  value=configvariable(&ARACHNEcfg,"NoHELO",NULL);
//  if(value && toupper(*value)=='Y') helo=0;
//!!glennmcc: end

  value=configvariable(&ARACHNEcfg,"SMTPlog",NULL);
  if(value && toupper(*value)=='Y') log=1;

//!!glennmcc: begin Nov 09, 2003 --- for Authenticated SMTP
//!!glennmcc: Feb 17, 2006 -- moved down below
/*
  value=configvariable(&ARACHNEcfg,"UseAuthSMTP",NULL);
  if(!value || toupper(*value)!='N') helo=2;
*/
//!!glennmcc: end

//!!glennmcc: begin Apr 30, 2004 --- for Authenticated SMTP
  value=configvariable(&ARACHNEcfg,"AuthSMTPusername",NULL);
//!!glennmcc: Sept 17, 2004
// changed so that "email" will always get used for "mail from"
//  if(value) makestr(url->user,value,STRINGSIZE-1);
  if(value) makestr(url->authuser,value,STRINGSIZE-1);
//!!glennmcc: end
  value=configvariable(&ARACHNEcfg,"AuthSMTPpassword",NULL);
//!!glennmcc: Feb 17, 2006 -- switch to new variable 'authpassword'
  if(value) makestr(url->authpassword,value,PASSWORDSIZE-1);
//if(value) makestr(url->password,value,STRINGSIZE-1);
//!!glennmcc: end
//!!glennmcc: Feb 17, 2006 -- switch to new variable 'authpassword'
if(strlen(url->authuser)>0 && strlen(url->authpassword)>0 &&
   strstr(configvariable(&ARACHNEcfg,"UseAuthSMTP",NULL),"Yes")
  )
   helo=2; else helo=1;
//!!glennmcc: end

  if(!url->user[0])
  {
   value=configvariable(&ARACHNEcfg,"eMail",NULL);
   makestr(url->user,value,STRINGSIZE-1);
  }

  if(!url->file[0] || !url->file[1] ) //stmp: or smtp:/
  {
   value=configvariable(&ARACHNEcfg,"MailPath",NULL);
   if(value)
   {
    sprintf(url->file,"/%s*.TBS",value);
   }
  }

  //Draw title and URL:

  MakeTitle(MSG_MAILUP);
  url2str(url,GLOBAL.location);
  SetInputAtom(&URLprompt,GLOBAL.location);
  DrawTitle(0);
  add2history(GLOBAL.location);

  //SMTP upload is performed here:

  if(!xsendmail(url,helo,log))

  {
   sprintf(p->htmlframe[0].cacheitem.locname,"%s%serr_smtp.ah",sharepath,GUIPATH);
   return GOTO_ERROR;
  }
  else if(arachne.scriptline==0)
  {
   if(strchr(url->file,'*') || GLOBAL.mailaction & MAIL_OUTBOXNOW)
   {
    value=configvariable(&ARACHNEcfg,"AfterSMTP",NULL);
    if(!value)
     strcpy(GLOBAL.location,"file://outbox.dgi");
    else
     strcpy(GLOBAL.location,value);
    GLOBAL.reload=RELOAD_CURRENT_LOCATION;
   }
   else
   {
//!!glennmcc: Feb 27, 2005
// since 'smtp:' is not being saved into history, 2 goback()s when we hit
// 'send mail now' on any of the mail compose screens ends-up taking us
// back one step too far.
// Therefore, we only goback once when it's not being sent 'on the spot'
    if(!strstr(GLOBAL.location,"smtp:")) goback(); //return to mailto: page...
//#ifdef NOKEY
//    goback();
//#endif
//!!glennmcc: end

    goback(); //return to page with <A HREF=mailto:...> tag...
    GLOBAL.postdata=0;

// RAY: This is done automaticaly now for inbox and outbox,
// see guivent.c
//    if(!strcmp(GLOBAL.location,"file://outbox.dgi"))
//     GLOBAL.reload=RELOAD_CURRENT_LOCATION;
//    else
//Ray: end
     GLOBAL.reload=NO_RELOAD;

   }
   return GOTO_IVEGOTNEWURL;
  }
  else
   return GOTO_READSCRIPT;
 }
 else
#endif //CLEMTEST
 //--------------------------------------------------------------- error?
  return UNKNOWN_PROTOCOL;
#ifndef CLEMTEST
 return CONTINUE_TO_RENDER;
#endif //CLEMTEST
}
Beispiel #7
0
//analyza PPP logu -> ziskani IP adresy
//!!JdS: 2003/12/7 {
//  Rewritten so that 'ppplogtime' can also be initialized when
//  using BOOTP via a dial-up connection. See also ArachneTCPIP().
//!!JdS: 2003/12/7 }
int PPPlog(void)
{
 int f,i,j;
 char *p;
 struct ftime ft;
 struct time d_time;
 struct date d_date;

 f=sopen("PPP.LOG",O_RDONLY|O_TEXT,SH_COMPAT, S_IREAD);
 if (f>=0)
 {
  if (ipmode==MODE_PPP)
  {
   long l=a_filelength(f);
   int plen;
   char buf[LOGLEN];

   if (l>LOGLEN)
    l=LOGLEN;
   lseek(f,-l,SEEK_END);
   i=read(f,buf,(int)l);
   buf[i]='\0';

   //puts(buf);
   j=0;
   p=configvariable(&ARACHNEcfg,"IP_Grab",NULL);
   if (!p)
    p="IP address set to";
   plen=strlen(p);
   while(j<i)
   {
    if (!strncmp(&buf[j],p,plen))
    {
     char tecka=0;

     p=strchr(&buf[j],'\n');
     if (p)
      *p='\0';

     outs(&buf[j]);
     i=0;
     j+=plen;
     while(buf[j]==' ')j++;
     while(i<19 &&
	   (buf[j+i]>='0' && buf[j+i]<='9' ||
	    buf[j+i]=='.' && tecka<3))
     {
      myIPstr[i]=buf[j+i];
      if (myIPstr[i]=='.')
       tecka++;
      i++;
     }
     myIPstr[i]='\0';
     my_ip_addr = resolve(myIPstr);
     break;
    }
    j++;
   }
  }

  //determine time online:
  if (my_ip_addr || ipmode==MODE_BOOTP)
  {
   getftime(f, &ft);
   d_date.da_year=ft.ft_year+1980;     /* current year */
   d_date.da_day=ft.ft_day;     /* day of the month */
   d_date.da_mon=ft.ft_month;     /* month (1 = Jan) */
   d_time.ti_min=ft.ft_min;   /* minutes */
   d_time.ti_hour=ft.ft_hour;  /* hours */
   d_time.ti_hund=0;  /* hundredths of seconds */
   d_time.ti_sec=ft.ft_tsec*2;   /* seconds */
   //ppplogtime is by default zero...
   ppplogtime = dostounix(&d_date, &d_time);
  }

  close(f);
  return(my_ip_addr || ipmode==MODE_BOOTP);
 }

 //puts(MSG_NOIP);
 return(0);
}
Beispiel #8
0
char *ArachneDIAL(void)
{
 char *value;
 char str[80];
 char terminal[80]="\0",hangup[80]="\0",useterm=0,dospppd=0;
 char *pausemsg=ctrlbreak;
 char buf[5*IE_MAXLEN];
 char altnameserver[IE_MAXLEN];
 char *altdns="\0";
//!!glennmcc: Mar 06, 2006 -- allow use of %DNS1 with miniterm/epppd
 char nameserver[IE_MAXLEN];
 char *dns="\0";
//!!glennmcc: end

 process_form(0,IE_NULL); //updateovat Arachne.Cfg

 if(tcpip)
 {
  value=configvariable(&ARACHNEcfg,"Hangup",NULL);
  if(value)
  {
   makestr(hangup,value,128);
   strcat(hangup,"\n");
  }
 }

 value=configvariable(&ARACHNEcfg,"UseTerminal",NULL);
 if(value && toupper(*value)=='Y')
 {
  value=configvariable(&ARACHNEcfg,"TerminalWindow",NULL);
  useterm=1;
 }
 else
  value=configvariable(&ARACHNEcfg,"Dialer",NULL);

 if(value && strcmpi(value,"NUL"))
 {
  makestr(terminal,value,128);
  strcat(terminal,"\n");
 }
 else
  useterm=0;

#ifndef NOETHERPPP
 value=configvariable(&ARACHNEcfg,"Connection",NULL);
 if(!value)
  return ("");

 /*
 if(!strncmpi(value,"@PPP.EXE",8))
 {
  int f,l;

  //vytvorit CONFIG.PPP
  f=a_open(configvariable(&ARACHNEcfg,"PPPconfig",NULL),O_RDONLY|O_TEXT,0);
  if(f!=-1)
  {
   l=a_read(f,buf,BUF/2);
   buf[l]='\0';
   a_close(f);
   sprintf(&buf[BUF/2+1],buf,
     configvariable(&ARACHNEcfg,"PPPusername",NULL),
     configvariable(&ARACHNEcfg,"PPPpassword",NULL));
   f=a_open("config.ppp",O_TEXT|O_WRONLY|O_CREAT|O_TRUNC,S_IREAD|S_IWRITE);
   write(f,&buf[BUF/2+1],strlen(&buf[BUF/2+1]));
   a_close(f);
  }


 }//end if ETHERPPP
 else
 */
//!!glennmcc: begin Dec 24, 2000
// changed "PPPD.EXE to "PPP" so that *any* .EXE, .COM or .BAT
// with "PPP" in the name will still result in a new PPPDRC.CFG file
// examples... epppd.exe ppp.exe myppp.exe lsppp.exe loadppp.bat ppp_drv.com
// if(strstr(strupr(value),"PPPD.EXE"))

//!!glennmcc: July 6, 2002 always write pppdrc.cfg
// if(strstr(strupr(value),"PPP"))
//!!glennmcc: end

//!!glennmcc: Jan 16, 2008 -- write data into both pppdrc.cfg & lsppp.cfg
 {
  int f=a_open("pppdrc.cfg",O_TEXT|O_WRONLY|O_CREAT|O_TRUNC,S_IREAD|S_IWRITE);
  int f2=a_open("lsppp.cfg",O_TEXT|O_WRONLY|O_CREAT|O_TRUNC,S_IREAD|S_IWRITE);
  if(f!=-1 && f2!=-1)
  {
   char *base,*default_base[4]={"0x3f8","0x2f8","0x3e8","0x2e8"};
   char *irq,*default_irq[4]={"4","3","4","3"};
   int port=0;

   value=configvariable(&ARACHNEcfg,"Port",NULL);
   if(value)
    port=atoi(value)-1;

   if(port>=0 && port<4)
   {
    irq=default_irq[port];
    base=default_base[port];
   }
   else
   {
    irq=configvariable(&ARACHNEcfg,"Irq",NULL);
    base=configvariable(&ARACHNEcfg,"Base",NULL);
   }

   dns=configvariable(&ARACHNEcfg,"NameServer",NULL);
   if(*dns=='%')
     {
      char *ptr=strchr(&dns[1],'%');
      if(ptr) *ptr='\0';
      dns=getenv(&dns[1]);
     }
   if(strlen(dns)>6)
      sprintf(nameserver,"namsrv %s\n",dns);
      else
      strcpy(nameserver,"\0");

   altdns=configvariable(&ARACHNEcfg,"AltNameServer",NULL);
   if(*altdns=='%')
     {
      char *ptr=strchr(&altdns[1],'%');
      if(ptr) *ptr='\0';
      altdns=getenv(&altdns[1]);
     }
   if(strlen(altdns)>6)
      sprintf(altnameserver,"namsrv %s\n",altdns);
      else
      strcpy(altnameserver,"\0");

//write pppdrc.cfg
   sprintf(buf,"\
%s\n\
irq %s\n\
base %s\n\
modem\n\
crtscts\n\
asyncmap 0\n\
%s\
%s\
user \"%s\"\n\
passwd \"%s\"\n",
   configvariable(&ARACHNEcfg,"Speed",NULL),
   irq,base,
   nameserver,
   altnameserver,
   configvariable(&ARACHNEcfg,"PPPusername",NULL),
   configvariable(&ARACHNEcfg,"PPPpassword",NULL));
   write(f,buf,strlen(buf));
   a_close(f);

//write lsppp.cfg
   sprintf(buf,"\
/M:%s\n\
/d:%s\n\
/B:%s\n\
/i:%s\n\
/b:%s\n\
/U:%s\n\
/P:%s\n\
/V:60\n",
   configvariable(&ARACHNEcfg,"InitString",NULL),
   configvariable(&ARACHNEcfg,"PhoneNumber",NULL),
   configvariable(&ARACHNEcfg,"Speed",NULL),
   irq,base,
   configvariable(&ARACHNEcfg,"PPPusername",NULL),
   configvariable(&ARACHNEcfg,"PPPpassword",NULL));
//!!glennmcc: Feb 14, 2008 -- also write DNSs into lsppp.cfg
if(strlen(dns)>6)
 {
  strcat(buf,"/N:");
  strcat(buf,dns);
 }
if(strlen(altdns)>6)
 {
  strcat(buf,",");
  strcat(buf,altdns);
 }
if(strlen(dns)>6)
   strcat(buf,"\n");
//!!glennmcc: end, Feb 14, 2008
   write(f2,buf,strlen(buf));
   a_close(f2);
  }
  dospppd=1;
  pausemsg=MSG_ESC;
 }
Beispiel #9
0
 {
  strcat(buf,",");
  strcat(buf,altdns);
 }
if(strlen(dns)>6)
   strcat(buf,"\n");
//!!glennmcc: end, Feb 14, 2008
   write(f2,buf,strlen(buf));
   a_close(f2);
  }
  dospppd=1;
  pausemsg=MSG_ESC;
 }
#endif

 value=configvariable(&ARACHNEcfg,"Connection",NULL);
 sprintf(buf,"%s%s@if errorlevel 1 goto skip\n%s\n:skip\n",hangup,terminal,value);

#ifndef NOETHERPPP
 if(dospppd)
 {
  strcat(buf,"@if exist IP-UP.BAT call IP-UP.BAT\n@echo PPPD status: ");
  value=configvariable(&ARACHNEcfg,"IP_Grab",NULL);
  strcat(buf,value);
  strcat(buf," %MYIP%>>PPP.LOG\n");
  unlink("IP-UP.BAT");
  unlink("PPP.LOG");
 }
#endif

 value=configvariable(&ARACHNEcfg,"DialPage",NULL);
Beispiel #10
0
//Draw time
void clock_and_timer(char *wait) //kresleni casu a screensaver
{
#ifndef POSIX
 struct  time t;
#endif 
 char cas2[32];

 timestr(cas2);
 if (strcmp(lasttime,cas2) == 0 ) return;

#ifndef CLEMTEST
#ifndef AGB
 if((ScreenSaver>0l||lasttime[0]=='*') && SecondsSleeping>(long)ScreenSaver*60l)
 {
 /*
 if(1)
 {
  mouseoff();
//  strcpy(buf,"system\\scrnsvrs\\stin.exe");
//  closebat(buf,RESTART_REDRAW);
//  GLOBAL.willexecute=willexecute(buf);
//  GLOBAL.gotolocation=1;

  execl("system\\scrnsvrs\\stin.exe","system\\scrnsvrs\\stin.exe",NULL);
  graphicsinit(arachne.graphics); // XLOPIF SVGA GRAPHICS
 }
 else
 */
 {
  int j;
  int fullscr[4]={0,0,0,0};
  int x,y,px,py,done=0;

  fullscr[2]=x_maxx();
  fullscr[3]=x_maxy();
  {
#define MAX_CERFS 20
#define MAX_TRACK 100
   int xx[MAX_CERFS],yy[MAX_CERFS],xs[MAX_CERFS],ys[MAX_CERFS],col[MAX_CERFS];
   int x2[MAX_CERFS],y2[MAX_CERFS],xs2[MAX_CERFS],ys2[MAX_CERFS];
   int tracklen[MAX_CERFS];
   int trackcnt[MAX_CERFS];
   int trackbuf[MAX_CERFS];
   int xtr[MAX_CERFS][MAX_TRACK],ytr[MAX_CERFS][MAX_TRACK];
   int xt2[MAX_CERFS][MAX_TRACK],yt2[MAX_CERFS][MAX_TRACK];
   int pom;
   int cerfs=MAX_CERFS/2;
   char barva0[6]={1,3,9,11,7,8};
   char barva1[6]={1,2,3,6,10,14};
   char *barva;
   char *value;
#ifdef HICOLOR
   int dc=1,p=0;
#endif

   //----------------------------screensaver
   mouseoff();
   x_cleardev();
#ifdef LINUX

#define RND(X) (random()*X)

   srandom(time(NULL));
#else

#define RND(X) random(X)

   randomize();
#endif

   value=configvariable(&ARACHNEcfg,"ScreenSaverColors",NULL);
   if(value && *value=='1')
    barva=barva1;
   else
    barva=barva0;

   value=configvariable(&ARACHNEcfg,"ScreenSaverMess",NULL);
   if(value)
   {
    cerfs=atoi(value);
    if(cerfs<1)
     cerfs=1;
    if(cerfs>MAX_CERFS)
     cerfs=MAX_CERFS;
   }

   value=configvariable(&ARACHNEcfg,"ScreenSaverStyle",NULL);

   j=0;
   while(j<cerfs) //deklarace car
   {
    xx[j]=100+RND(fullscr[2]-200);
    yy[j]=100+RND(fullscr[3]-200);

    if(*value=='C')
     x2[j]=10+RND(fullscr[3]/3);
    else
    {
     x2[j]=120+RND(fullscr[2]-240);
     y2[j]=120+RND(fullscr[3]-240);
    }

    if(*value=='R')
     {xs[j]=RND(2);if(xs[j]==0)xs[j]=-1;}
    else
     {xs[j]=RND(3);if(xs[j]==2)xs[j]=-1;}
    ys[j]=RND(2);if(ys[j]==0)ys[j]=-1;

    xs2[j]=RND(2);if(xs2[j]==0)xs2[j]=-1;
    if(*value=='R')
     {ys2[j]=RND(2);if(ys2[j]==0)ys2[j]=-1;}
    else
     {ys2[j]=RND(3);if(ys2[j]==2)ys2[j]=-1;}
    col[j]=barva[RND(6)];
    pom=RND(MAX_TRACK-10)+10;
    tracklen[j]=pom;
    trackcnt[j]=1; //odsud se bude cist
    trackbuf[j]=0; //sem se bude zapisovat
    while(pom>=0)
    {
     xtr[j][pom]=0;
     ytr[j][pom]=0;
     xt2[j][pom]=0;
     yt2[j][pom]=0;
     pom--;
    }
    j+=1;
   }//loop
   j=0;

   ImouseRead( &x, &y );
   ImouseWait();
   px=x;py=y;
   while(!done) //animace
   {
    if(wait!=NULL)
    {
#ifdef POSIX
     time_t t=time(NULL);
     struct tm *gt=gmtime(&t);
    
     sprintf(cas2,"%2d:%02d:%02d",
      gt->tm_hour, gt->tm_min, gt->tm_sec );
#else
     gettime(&t);
     sprintf(cas2,"%2d:%02d:%02d", t.ti_hour, t.ti_min, t.ti_sec );
#endif
     if(strstr(wait,cas2)!=NULL)break;
    }//endif

#ifndef LINUX
    if(g_PrtScr)
    {
     g_PrtScr = 0;
     PrintScreen2BMP(0);
     goto out;
    }
#endif
    
    //mazani stopy
    x_setcolor(0);
#ifndef LINUX    
    if(*value=='C')
     x_circle(xtr[j][trackcnt[j]],ytr[j][trackcnt[j]],xt2[j][trackcnt[j]]);
    else
#endif    
    if(*value=='R')
     x_rect(xtr[j][trackcnt[j]],ytr[j][trackcnt[j]],xt2[j][trackcnt[j]],yt2[j][trackcnt[j]]);
    else
     x_line(xtr[j][trackcnt[j]],ytr[j][trackcnt[j]],xt2[j][trackcnt[j]],yt2[j][trackcnt[j]]);
    if(++trackcnt[j]>tracklen[j])trackcnt[j]=0;
    xtr[j][trackbuf[j]]=xx[j];
    ytr[j][trackbuf[j]]=yy[j];
    xt2[j][trackbuf[j]]=x2[j];
    yt2[j][trackbuf[j]]=y2[j];
    if(++trackbuf[j]>tracklen[j])trackbuf[j]=0;

    //kresleni nove cary
    x_setcolor(col[j]);
#ifndef LINUX
    if(*value=='C')
     x_circle(xx[j],yy[j],x2[j]);
    else 
#endif
    if(*value=='R')
     x_rect(xx[j],yy[j],x2[j],y2[j]);
    else
     x_line(xx[j],yy[j],x2[j],y2[j]);
    xx[j]+=xs[j];
    yy[j]+=ys[j];
    x2[j]+=xs2[j];
    y2[j]+=ys2[j];
    if(xx[j]>=fullscr[2]||xx[j]<=0)xs[j]=-xs[j];
    if(yy[j]>=fullscr[3]||yy[j]<=0)ys[j]=-ys[j];
    if(x2[j]>=fullscr[2]||x2[j]<=0)xs2[j]=-xs2[j];
    if(y2[j]>=fullscr[3]||y2[j]<=0)ys2[j]=-ys2[j];
    j++;
    if(j==cerfs)
     j=0;

    if(*value=='C' || j%10==0)
    {
//!!RAY: Sep 30, 2006 -- CTRL key will now deactivate the screensaver
     if((bioskey(1) || bioskey(2) &4) || ImouseRead( &x, &y ) || x!=px || y!=py)
//     if(bioskey(1) || ImouseRead( &x, &y ) || x!=px || y!=py)
      done=1;
    }
    px=x;py=y;

#ifdef HICOLOR
   if(xg_256 == MM_Hic)
   {
    if(p>20*cerfs)
    {
     dc=-dc;
     p=0;
    }
    p++;
    if(p%cerfs==0)
    {
     int c=1;
     while(c<16)
     {
      if(c%2)
       dc=-dc;
      Iipal[c*3]+=dc;
      if(Iipal[c*3]>63)
       Iipal[c*3]=63;
      if(Iipal[c*3]<0)
       Iipal[c*3]=0;
      Iipal[c*3+1]+=dc;
      if(Iipal[c*3+1]>63)
       Iipal[c*3+1]=63;
      if(Iipal[c*3+1]<0)
       Iipal[c*3+1]=0;
      Iipal[c*3+2]+=dc;
      if(Iipal[c*3+2]>63)
       Iipal[c*3+2]=63;
      if(Iipal[c*3+2]<0)
       Iipal[c*3+2]=0;
      c++;
     }//loop
    }
    x_palett( 16, Iipal);
   }
#endif

   }//loop
   if(bioskey(1))bioskey(0);
   ImouseWait();
   out:
#ifdef HICOLOR
   if(xg_256 == MM_Hic)
    initpalette();
#endif
   x_cleardev();
   RedrawALL();
   DrawTitle(1);
   if(lasttime[1]=='*')
    redraw=4;
   else
    redraw=3;
  }
 }
  SecondsSleeping=0l;
 }//endif screensaver
#endif// AGB
#endif// CLEMTEST

#ifndef GGI //it doesn't make sense to show time in X11 app..
 if(!fullscreen)
 {
  x_setfill(0,7); //sediva
  if(mousey>x_maxy()-30 && mousex>x_maxx()-230)
   mouseoff();
 #ifdef CUSTOMER
  x_bar(x_maxx()-56,x_maxy()-13,x_maxx()-2,x_maxy()-2);
  x_setcolor(0); //cerna
  htmlfont(1,0);
  x_text_ib( x_maxx()-56,x_maxy()-15,(unsigned char *)cas2);

 #elif AGB

  x_bar(x_maxx()-56,x_maxy()-13,x_maxx()-2,x_maxy()-2);
  x_setcolor(0); //cerna
  htmlfont(1,0);
  x_text_ib( x_maxx()-56,x_maxy()-15,(unsigned char *)cas2);

 #else

  x_bar(x_maxx()-206,x_maxy()-13,x_maxx()-156,x_maxy()-2);
  x_setcolor(0); //cerna
//!!glennmcc: Aug 22, 2005
//prevent fontshift >0 from causing the clock to go 'off the right'
  htmlfont(0-user_interface.fontshift,0);
//  htmlfont(1,0);
  x_text_ib( x_maxx()-206,x_maxy()-15,(unsigned char *)cas2);

 #endif
  if(mousey>x_maxy()-30 && mousex>x_maxx()-230)
   mouseon();
 }
#endif

 if(lasttime[0]) //not if time redraw was forced!
 {
  SecondsSleeping++;
  if(GLOBAL.timeout)
   GLOBAL.secondsleft--;
  if(ppplogtime && tcpip)
   draw_time_online();
 }

 strcpy(lasttime,cas2);
}//end sub