首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于TCP的MbedTLS应用

基于TCP的MbedTLS应用
EN

Stack Overflow用户
提问于 2021-09-24 08:38:19
回答 1查看 303关注 0票数 0

我试图用stm32f4在我的lwip应用程序上使用mbedtls。我在做非rtos系统。

我正在使用lwip-altcp库。我需要用altcp函数来改变我的函数,

这是旧功能:

代码语言:javascript
复制
BOOL
xMBTCPPortInit( USHORT usTCPPort )
{
    struct tcp_pcb *pxPCBListenNew, *pxPCBListenOld;
    BOOL            bOkay = (BOOL)FALSE;
    USHORT          usPort;

    if( usTCPPort == 0 )
    {
        usPort = MB_TCP_DEFAULT_PORT;
    }
    else
    {
        usPort = ( USHORT ) usTCPPort;
    }

    if( ( pxPCBListenNew = pxPCBListenOld = tcp_new(  ) ) == NULL )
    {
        /* Can't create TCP socket. */
        bOkay = (BOOL)FALSE;
    }
    else if( tcp_bind( pxPCBListenNew, IP_ADDR_ANY, ( u16_t ) usPort ) != ERR_OK )
    {
        /* Bind failed - Maybe illegal port value or in use. */
        ( void )tcp_close( pxPCBListenOld );
        bOkay = (BOOL)FALSE;
    }
    else if( ( pxPCBListenNew = tcp_listen( pxPCBListenNew ) ) == NULL )
    {
        ( void )tcp_close( pxPCBListenOld );
        bOkay = (BOOL)FALSE;
    }
    else
    {
        /* Register callback function for new clients. */
        tcp_accept( pxPCBListenNew, prvxMBTCPPortAccept );

        /* Everything okay. Set global variable. */
        pxPCBListen = pxPCBListenNew;

#ifdef MB_TCP_DEBUG
        vMBPortLog( MB_LOG_DEBUG, "MBTCP-ACCEPT", "Protocol stack ready.\r\n" );
#endif
    }
    bOkay = (BOOL)TRUE;
    return bOkay;
}

我试图这样改变:

代码语言:javascript
复制
BOOL
xMBTCPPortInit( USHORT usTCPPort )
{
    struct altcp_pcb *pxPCBListenNew, *pxPCBListenOld;
    BOOL            bOkay = (BOOL)FALSE;
    USHORT          usPort;

    if( usTCPPort == 0 )
    {
        usPort = MB_TCP_DEFAULT_PORT;
    }
    else
    {
        usPort = ( USHORT ) usTCPPort;
    }

    if( ( pxPCBListenNew = pxPCBListenOld = altcp_new( NULL ) ) == NULL )
    {
        /* Can't create TCP socket. */
        bOkay = (BOOL)FALSE;
    }
    else 
      if( altcp_bind( pxPCBListenNew, IP_ADDR_ANY, ( u16_t ) usPort ) != ERR_OK )
    {

        /* Bind failed - Maybe illegal port value or in use. */
        ( void )altcp_close( pxPCBListenOld );
        bOkay = (BOOL)FALSE;
    }
    else if( ( pxPCBListenNew = altcp_listen( pxPCBListenNew ) ) == NULL )
    {

        ( void )altcp_close( pxPCBListenOld );
        bOkay = (BOOL)FALSE;
    }
    else
    {
        /* altcp_tls_new(pxPCBListenNew, IP_GET_TYPE(ip_addr))*/;
        /* Register callback function for new clients. */
        altcp_accept( pxPCBListenNew, prvxMBTCPPortAccept );

        /* Everything okay. Set global variable. */
        pxPCBListen = pxPCBListenNew;

#ifdef MB_TCP_DEBUG
        vMBPortLog( MB_LOG_DEBUG, "MBTCP-ACCEPT", "Protocol stack ready.\r\n" );
#endif
    SerialPrint("MBTCTP-ACCEPT");
    }
        altcp_tls_create_config_client(certfile, certlen);

    bOkay = (BOOL)TRUE;
    return bOkay;
}

我想我在使用altcp_new( NULL )函数时出错了,因为当我对使用mbedtls-altcp的另一个示例代码感兴趣时,我看到了一行https://github.com/straight-coding/LPC407x-NoOS-LWIP-MBEDTLS-HTTPD-KEIL/blob/f3943f7487a296a16ddff51885c9c8d0ca07562a/LambdaIOT/httpd/http_core.c#L419

他们使用altcp_tls_new函数,但是这个函数需要altcp_tls_config参数,但是我只有tcp参数。如何更改modbus-tcp连接函数?

代码语言:javascript
复制
struct altcp_pcb *
altcp_tls_new(struct altcp_tls_config *config, u8_t ip_type)
{
  struct altcp_pcb *inner_conn, *ret;
  LWIP_UNUSED_ARG(ip_type);

  inner_conn = altcp_tcp_new_ip_type(ip_type);
  if (inner_conn == NULL) {
    printf("altcp_tls_new inner_conn = nULL\r\n");
    return NULL;
  }
  ret = altcp_tls_wrap(config, inner_conn);
  if (ret == NULL) {
    printf("altcp_tls_new altcp_tls_wrap return null\r\n");
    altcp_close(inner_conn);
  }
  return ret;
}
EN

回答 1

Stack Overflow用户

发布于 2021-12-08 15:34:17

要创建altcp_tls_config参数,您需要创建altcp_tls_config结构的一个新实例,并将其传递给altcp_tls_new()。

此链接将对其进行进一步详细解释。https://www.nongnu.org/lwip/2_1_x/group__altcp__api.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69311989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档