OpenCores
URL https://opencores.org/ocsvn/plasma/plasma/trunk

Subversion Repositories plasma

[/] [plasma/] [trunk/] [kernel/] [tcpip.c] - Diff between revs 302 and 304

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 302 Rev 304
Line 622... Line 622...
 
 
 
 
static int IPProcessTCPPacket(IPFrame *frameIn)
static int IPProcessTCPPacket(IPFrame *frameIn)
{
{
   uint32 seq, ack;
   uint32 seq, ack;
   int length, ip_length, bytes, rc=0;
   int length, ip_length, bytes, rc=0, notify=0;
   IPSocket *socket, *socketNew;
   IPSocket *socket, *socketNew;
   IPFrame *frameOut, *frame2, *framePrev;
   IPFrame *frameOut, *frame2, *framePrev;
   uint8 *packet, *packetOut;
   uint8 *packet, *packetOut;
 
 
   packet = frameIn->packet;
   packet = frameIn->packet;
Line 698... Line 698...
            socketNew->prev = NULL;
            socketNew->prev = NULL;
            if(SocketHead)
            if(SocketHead)
               SocketHead->prev = socketNew;
               SocketHead->prev = socketNew;
            SocketHead = socketNew;
            SocketHead = socketNew;
            OS_MutexPost(IPMutex);
            OS_MutexPost(IPMutex);
 
            if(socketNew->funcPtr)
 
               OS_Job(socketNew->funcPtr, socketNew, 0, 0);
            return 0;
            return 0;
         }
         }
      }
      }
 
 
      //Send reset
      //Send reset
Line 787... Line 789...
   }
   }
 
 
   //Check if RST flag set
   //Check if RST flag set
   if(packet[TCP_FLAGS] & TCP_FLAGS_RST)
   if(packet[TCP_FLAGS] & TCP_FLAGS_RST)
   {
   {
 
      notify = 1;
      if(socket->state == IP_FIN_SERVER)
      if(socket->state == IP_FIN_SERVER)
         IPClose2(socket);
         IPClose2(socket);
      else if(socket->state == IP_TCP)
      else if(socket->state == IP_TCP)
         socket->state = IP_FIN_CLIENT;
         socket->state = IP_FIN_CLIENT;
   }
   }
   //Copy packet into socket
   //Copy packet into socket
   else if(socket->ack == seq && bytes > 0)
   else if(socket->ack == seq && bytes > 0)
   {
   {
      //Insert packet into socket linked list
      //Insert packet into socket linked list
 
      notify = 1;
      if(socket->timeout)
      if(socket->timeout)
         socket->timeout = socket->timeoutReset;
         socket->timeout = socket->timeoutReset;
      if(IPVerbose)
      if(IPVerbose)
         printf("D");
         printf("D");
      if(frameIn->length > ip_length + IP_VERSION_LENGTH)
      if(frameIn->length > ip_length + IP_VERSION_LENGTH)
Line 835... Line 839...
   }
   }
 
 
   //Check if FIN flag set
   //Check if FIN flag set
   if(packet[TCP_FLAGS] & TCP_FLAGS_FIN)
   if(packet[TCP_FLAGS] & TCP_FLAGS_FIN)
   {
   {
 
      notify = 1;
      socket->timeout = SOCKET_TIMEOUT;
      socket->timeout = SOCKET_TIMEOUT;
      if(IPVerbose)
      if(IPVerbose)
         printf("F");
         printf("F");
      frameOut = IPFrameGet(0);
      frameOut = IPFrameGet(0);
      if(frameOut == NULL)
      if(frameOut == NULL)
Line 852... Line 857...
      else if(socket->state == IP_TCP)
      else if(socket->state == IP_TCP)
         socket->state = IP_FIN_CLIENT;
         socket->state = IP_FIN_CLIENT;
   }
   }
 
 
   //Notify application
   //Notify application
   if(socket->funcPtr)
   if(socket->funcPtr && notify)
      OS_Job(socket->funcPtr, socket, 0, 0);
      OS_Job(socket->funcPtr, socket, 0, 0);
   return rc;
   return rc;
}
}
 
 
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.