Beispiel #1
0
void
refiq()
{
    register struct mbuf *bp;
    char i_state;
#ifdef  PI              /* Temp hack to satisfy PI DMA requirements */
    int32 dma_abs;  /* TEMP */
    int16 dma_page; /* TEMP */
#endif
  
    /* Empty the garbage */
    if(Garbq != NULLBUF){
        i_state = dirps();
        bp = Garbq;
        Garbq = NULLBUF;
        restore(i_state);
        free_p(bp);
    }
    /* Replenish interrupt buffer pool */ /* G1EMM and HB9RWM fix */
    while((Intqlen < Nibufs) && (Memthresh < availmem()) ){
#ifdef notdef
        while(Intqlen < Nibufs){
#endif
            if((bp = alloc_mbuf(Ibufsize)) == NULLBUF)
                break;
#ifdef  PI              /* Temp hack to satisfy PI DMA requirements */
            dma_abs = ((long)FP_SEG(bp->data) << 4) + (long)FP_OFF(bp->data);
            dma_page = dma_abs >> 16;
            if(((dma_abs+Ibufsize) >> 16) != dma_page){
                i_state = dirps();
                bp->next = Garbq;
                Garbq = bp;
                restore(i_state);
                continue;
            }
#endif
  
            i_state = dirps();
            bp->next = Intq;
            Intq = bp;
            Intqlen++;
            restore(i_state);
        }
        if(Iminfree == -1)
            Iminfree = Intqlen;
    }
  
    void
    iqstat()
    {
        tprintf("Intqlen %u Ibufsize %u Iminfree %u Ibuffail %lu Imaxrq %u\n",
        Intqlen,Ibufsize,Iminfree,Ibuffail,Ibuf_max_rq);    /* g8fsl */
    }
// Adding  --- By Arius  3/15/2000
// This function will begin service of telnet when printer server was started.
// It will prepare parameter for telnet connection.
void telnetstart(cyg_addrword_t data)
{
	struct sockaddr_in lsocket;
	struct sockaddr_in sa_client;
	int    s;
	FILE   *network;
	char   Buffer[50];
	int16  clen;
	
	while( Network_TCPIP_ON == 0 )
		ppause(100);
	
	if (telnetlink != -1)
	 return;

	lsocket.sin_family = AF_INET;
	lsocket.sin_addr.s_addr = htonl(INADDR_ANY);
	
	lsocket.sin_port = htons(IPPORT_TELNET);
	
	telnetlink = socket(AF_INET,SOCK_STREAM,0);
	bind(telnetlink,(struct sockaddr *)&lsocket,sizeof(lsocket));
	
	listen(telnetlink,1);
	for (;;)
	{
		clen=sizeof(sa_client);
		memset(&sa_client, 0, clen);
		if ((s = accept(telnetlink,(struct sockaddr *) &sa_client, &clen)) == -1)
			break;  /* Service is shutting down */
	
		if (TELNETDUsers >= TELNET_MAX_USER || availmem() != 0)
		{
			// open file will prepare to send message to client
		    network = fdopen(s,"r+t");
		
		    fputs("\r\n This service will offer one user to use it. \r\n",network);
		    sprintf(Buffer," The Current User is [IP:%s]\r\n",inet_ntoa(CurrentIP));
		    fputs(Buffer,network);
		    fclose(network);   // close network
		
//Jesse		    shutdown(s,1);
//Jesse		    close_s(s);
		}
		else
		{
		    CurrentIP.s_addr = sa_client.sin_addr.s_addr;
		    // Spawn a child process
		//        newproc("ServicedForTelnet",1024,TServerMainFunction,s,NULL,NULL,0);
				
			if( TELNET_SERVER_MAIN_TaskHdl != 0 )
					cyg_thread_delete(TELNET_SERVER_MAIN_TaskHdl);
			
			//Create TELNET_SERVER_MAIN Thread
			cyg_thread_create(TELNET_SERVER_MAIN_TASK_PRI,
			              TServerMainFunction,
			              s,
			              "ServicedForTelnet",
			              (void *) (TELNET_SERVER_MAIN_Stack),
			              TELNET_SERVER_MAIN_TASK_STACK_SIZE,
			              &TELNET_SERVER_MAIN_TaskHdl,
			              &TELNET_SERVER_MAIN_Task);
			
			//Start TELNET_SERVER_MAIN Thread
			cyg_thread_resume(TELNET_SERVER_MAIN_TaskHdl);	
		
		}
	}
	
	return;
}