Ejemplo n.º 1
0
// ---------------------------------------------------------------------------
// TCP_RetransmitSrvTcpMsg : ReEnviar mensaje SrvTcp por puerto TCP
//
UINT8 TCP_RetransmitSrvTcpMsg(UINT8 SocketIdx)
{
  UINT16  i;
  UINT16  len;
  UINT8   TimerGetStateId;
  UINT8*  pTxBuffer;
  UINT8   bTmpToken; 
  UINT8   BufLen;

  if (tcp_getstate(TcpSockSrv[SocketIdx].TcpSrvTcpSoch) != TCP_STATE_CONNECTED){
        return (-1);
  }

  if (tcp_checksend(TcpSockSrv[SocketIdx].TcpSrvTcpSoch) < 0) 
  {
    TcpWhileFlag = 0x01;
    TimerGetStateId = TMR_SetTimer ( TCP_WAITFORSEND_TOUT , OS_NOT_PROC, TCP_StopWhileProc, FALSE);
    while (tcp_checksend(TcpSockSrv[SocketIdx].TcpSrvTcpSoch) < 0)
    {
       if (!TcpWhileFlag) return (-1);    // Cuando vence el timer se resetea TcpWhileFlag
    }
    TMR_FreeTimer ( TimerGetStateId );
  }

  bTmpToken = TcpSockSrv[SocketIdx].BufferToken;
  if (MemGetBufferPtr( bTmpToken ,  (void**)(&pTxBuffer) ) != OK ){      
    (void)MemFreeBuffer (bTmpToken);   // Liberar por las dudas ? ABR: control de errores
    return(-1);   
  }

  BufLen = *pTxBuffer;
  pTxBuffer++;

  len = 0;
  for( i=0 ; i < BufLen ; i++ ){
	  net_buf[TCP_APP_OFFSET+len] = *pTxBuffer;
	  pTxBuffer++;
	  len++;
	}

  if(tcp_send(TcpSockSrv[SocketIdx].TcpSrvTcpSoch, &net_buf[TCP_APP_OFFSET], NETWORK_TX_BUFFER_SIZE - TCP_APP_OFFSET, len) == len) {
	    DEBUGOUT("TCP: bytes reply sent!\r\n");
#if DEBUG_AT(DBG_LEVEL_2)
  if (SYS_ConfigParam.DebugLevel>= DBG_LEVEL_2)
  {                    
		  (void)sprintf((char *)udp_buf,"TCP_Sent Len: %d, IP:%d \n",
		                len,
		                (BYTE)TcpSockSrv[SocketIdx].SlaveIpAddress);
      udp_data_to_send = TRUE;
  }
#endif
	}
  else {
      DEBUGOUT("TCP: error occured while trying to send data!\r\n");
	}

	return (1);
	
}
Ejemplo n.º 2
0
// ---------------------------------------------------------------------------
// Asegurar conexion
//
UINT8 TCP_VerifyCliTcpConnection(void)
{

  if (tcp_getstate(TcpCliTcpSoch) != TCP_STATE_CONNECTED){
  
      if ( tcp_connect (TcpCliTcpSoch, CliTcpIp, (UINT16)(CliTcpSockPort), 0 ) == (-1)){   //(UINT16)(DNP_LOCAL_PORT) 
        return 0x01;
      }
     
  } 
//  else{
//    tcp_sendcontrol(TcpCliTcpSoch);
//  }
  return 0x00;
}
Ejemplo n.º 3
0
// ---------------------------------------------------------------------------
// TCP_SendSrvTcpMsg : Enviar mensaje SrvTcp por puerto TCP
//
//UINT8 TCP_SendSrvTcpMsg (void)
UINT8 TCP_SendSrvTcpBuff(UINT8 * Buff, UINT16 BufLen, UINT8 SocketIdx)
{
  UINT16  i;
  UINT16  len;
  UINT8   TimerGetStateId;

  if (tcp_getstate(TcpSockSrv[SocketIdx].TcpSrvTcpSoch) != TCP_STATE_CONNECTED){
        return 0x01;
  }

  if (tcp_checksend(TcpSockSrv[SocketIdx].TcpSrvTcpSoch) < 0) 
  {
    TcpWhileFlag = 0x01;
    TimerGetStateId = TMR_SetTimer ( TCP_WAITFORSEND_TOUT , OS_NOT_PROC, TCP_StopWhileProc, FALSE);
    while (tcp_checksend(TcpSockSrv[SocketIdx].TcpSrvTcpSoch) < 0)
    {
       if (!TcpWhileFlag) return 0x01;    // Cuando vence el timer se resetea TcpWhileFlag
    }
    TMR_FreeTimer ( TimerGetStateId );
  }

  len = 0;
  for( i=0 ; i < BufLen ; i++ ){
	  net_buf[TCP_APP_OFFSET+len] = *Buff;
	  Buff++;
	  len++;
	}

  if(tcp_send(TcpSockSrv[SocketIdx].TcpSrvTcpSoch, &net_buf[TCP_APP_OFFSET], NETWORK_TX_BUFFER_SIZE - TCP_APP_OFFSET, len) == len) {
	    DEBUGOUT("TCP: bytes reply sent!\r\n");
#if DEBUG_AT(DBG_LEVEL_2)
  if (SYS_ConfigParam.DebugLevel>= DBG_LEVEL_2)
  {                    
		  (void)sprintf((char *)udp_buf,"TCP_Sent Len: %d, IP:%d \n",
		                len,
		                (BYTE)TcpSockSrv[SocketIdx].SlaveIpAddress);
      udp_data_to_send = TRUE;
  }
#endif
	}
  else {
      DEBUGOUT("TCP: error occured while trying to send data!\r\n");
	}

	return 0x00;
	
}
Ejemplo n.º 4
0
// ---------------------------------------------------------------------------
// Enviar mensaje por puerto TCP con informacion de CliTcp
//
UINT8 TCP_SendCliTcpBuff(UINT8 * Buff, UINT16 BufLen)
{
  UINT16  i;
  UINT16  len;
  UINT8   TimerGetStateId;
  
//  CliTcpIpChar[0] = 192;
//  CliTcpIpChar[1] = 168;
//  CliTcpIpChar[2] = 0;
//  CliTcpIpChar[3] = 32;
 	   
  if (tcp_getstate(TcpCliTcpSoch) != TCP_STATE_CONNECTED){
  
      if ( tcp_connect (TcpCliTcpSoch, CliTcpIp, (UINT16)(CliTcpSockPort), 0 ) == (-1)){ // (UINT16)(DNP_LOCAL_PORT) 
        return 0x01;
      }
  }

  if (tcp_checksend(TcpCliTcpSoch) < 0) 
  {
    TcpWhileFlag = 0x01;
    TimerGetStateId = TMR_SetTimer ( TCP_WAITFORSEND_TOUT , OS_NOT_PROC, TCP_StopWhileProc, FALSE);
    while (tcp_checksend(TcpCliTcpSoch) < 0)
    {
       if (!TcpWhileFlag) return 0x01;    // Cuando vence el timer se resetea TcpWhileFlag
    }
    TMR_FreeTimer ( TimerGetStateId );
  }
  
  len = 0;
  for( i=0 ; i < BufLen ; i++ ){
	  net_buf[TCP_APP_OFFSET+len] = *Buff;
	  Buff++;
	  len++;
	}

  if(tcp_send(TcpCliTcpSoch, &net_buf[TCP_APP_OFFSET], NETWORK_TX_BUFFER_SIZE - TCP_APP_OFFSET, len) == len) {
	    DEBUGOUT("TCP: bytes reply sent!\r\n");
	}
  else {
      DEBUGOUT("TCP: error occured while trying to send data!\r\n");
	}

	return 0x00;
}
Ejemplo n.º 5
0
void smtpc_run (void)
{
	/* On that function we can send data when called by main loop	*/
	
	if( smtpc_init_done == 0 )
		return;
	
	if( smtp_client.state < SMTP_OPEN_REQUESTED)
		return;
		
	/* Is there timeout of some sort?	*/
		
	if(check_timer(smtp_client.tmrhandle) == 0) {
		/* Yep	*/
		(void)tcp_abort(smtp_client.sochandle);
		smtpc_changestate(SMTP_CLOSED);
			
		/* Make user callback	*/
		smtpc_error();
		return;
		
	}	
	
	if( smtp_client.state == SMTP_OPEN_REQUESTED) {
		/* We are on this state because user has requested connection	*/
		/* but connection is not yet opened.							*/
		/* Try to get TCP stack to accept our connection request		*/
		
		(void)tcp_abort(smtp_client.sochandle);	/* Release old connection	*/
		if(tcp_connect(smtp_client.sochandle, smtp_client.remip, smtp_client.remport, 0) >= 0)
			smtpc_changestate(SMTP_CONNECTIONOPEN_SENT);
		
		return;
	}
	
	

	if( tcp_getstate(smtp_client.sochandle) != TCP_STATE_CONNECTED ) {
		return;
	}
	
	if( tcp_checksend(smtp_client.sochandle) < 0 )
		return;
	
	/* It's connected and no unacked data so try to send	*/
	
	
	if(smtp_client.state == SMTP_SERVER_READY) {
		/* Send HELO	*/
		smtpc_sendhelo();
		smtpc_changestate(SMTP_HELO_SENT);
		DEBUGOUT("SMTP HELO packet sent\r\n");
		return;
	}
	
	if(smtp_client.state == SMTP_HELO_ACKED) {
		/* Send MAIL FROM	*/
		smtpc_sendmailfrom();
		smtpc_changestate(SMTP_MAILFROM_SENT);
		DEBUGOUT("SMTP MAIL FROM packet sent\r\n");
		return;
	}	
	
	if(smtp_client.state == SMTP_MAILFROM_ACKED) {
		/* Send RCPT TO	*/
		smtpc_sendrcptto();
		smtpc_changestate(SMTP_RCPTTO_SENT);
		DEBUGOUT("SMTP RCPT TO packet sent\r\n");
		return;
	}	
	
	if(smtp_client.state == SMTP_RCPTTO_ACKED) {
		/* Send DATA	*/
		smtpc_senddatareq();
		smtpc_changestate(SMTP_DATAREQ_SENT);
		DEBUGOUT("SMTP DATA packet sent\r\n");
		return;
	}	
	
	if(smtp_client.state == SMTP_DATAREQ_ACKED)	{
		/* Send BODY	*/
		smtpc_sendbody();
		smtpc_changestate(SMTP_BODY_SENT);
		DEBUGOUT("SMTP BODY packet sent\r\n");
		return;
	}	
	
	
	/* Body is part of plain text so we just make internal state change	*/
	/* when TCP has acked the body packet. This pseudo-state just helps */
	/* us to regenerate the body when needed							*/
	
	if(smtp_client.state == SMTP_BODY_SENT)
		smtpc_changestate(SMTP_SENDING_DATA);
	
	if(smtp_client.state == SMTP_SENDING_DATA) {
		/* Inform user app that old data is acked now	*/
		
		smtpc_dataacked();		
	
		if (smtpc_senddata() < 0) {
			/* End of data, send CRLF.CRLF	*/
			
			DEBUGOUT("SMTP End of data reached\r\n");
			smtpc_senddataend();
			smtpc_changestate(SMTP_DATAEND_SENT);
			
		}
		return;
	}	
	
		
	if(smtp_client.state == SMTP_DATAEND_ACKED) {
		/* Send QUIT	*/
		smtpc_sendquit();
		smtpc_changestate(SMTP_QUIT_SENT);
		DEBUGOUT("SMTP QUIT packet sent\r\n");
		return;
	}		


	if(smtp_client.state == SMTP_QUIT_ACKED) {
	
		/* Inform application that data is sent OK	*/
		
		smtpc_allok();
	
		/* Try to close TCP	*/
		
		if(tcp_close(smtp_client.sochandle) >= 0) {
			smtpc_changestate(SMTP_CLOSED);
			DEBUGOUT("SMTP connection closed OK\r\n");
			return;
		}
		
		/* Close is not accepted by TCP. See if timeout	*/
		
		if(check_timer(smtp_client.tmrhandle) == 0) {
			/* Use brute force		*/
			
			(void)tcp_abort(smtp_client.sochandle);
			smtpc_changestate(SMTP_CLOSED);
			DEBUGOUT("SMTP connection closed by ABORT\r\n");
			return;
		}
		
		/* Keep trying untill timeout	*/
		
		return;
		
	}	
	
	return;

}