

sdk/system/netutils/webclient/webclient.cを改変して、バイナリファイルを送信しようとしていて気づいたのですが、  
1500バイト以上のテキスト(バッファー)を送信しようとすると、ちゃんとバッファーのバイト数分送信しようとするのですが、  
中身は先頭の1500バイトを繰り返して送っているように見えます。

wget_baseはバイナリに対応していないのは把握しており、wget_baseをコピーしてwget_base_post_binaryという別の関数を作って試していますが、大元ののwget_baseに問題がありそうでした。

具体的には、以下の部分が問題かと思われます。

sdk/system/netutils/webclient/webclient.c: wget_base(FAR const char *url, FAR
char *buffer, int buflen,  
wget_callback_t callback, FAR void *arg,  
FAR const char *posts, uint8_t mode)  
の中の、

[code]

          do
            {
              ret = https ? tls_socket_write(sockfd, buffer, len)
                          : send(sockfd, buffer, len, 0);
              if (ret < 0)
                {
                  nerr("ERROR: send failed: %d\n", errno);
                  goto errout;
                }
              len = len - ret;
            }
          while (len != 0);
    
[/code]

という箇所ですが、

[code]

          char *p_buffer = buffer;
          do
            {
              ret = https ? tls_socket_write(sockfd, p_buffer, len)
                          : send(sockfd, p_buffer, len, 0);
              if (ret < 0)
                {
                  nerr("ERROR: send failed: %d\n", errno);
                  goto errout;
                }
              p_buffer += ret;
              len = len - ret;
            }
          while (len != 0);
    
[/code]

と書く必要があるのではないでしょうか。


CC BY-SA 4.0
2020-03-09T13:47:33.477
63701
2020-03-16T01:46:07.413
38147
question
spresense http
Spresense SDKでのwget_postでの1500バイト以上での送信について


ソニーのSPRESENSEサポート担当です。

SDKに含まれるwebclient.cのwget_baseですが、ご指摘の通り誤りがございました。  
修正をGithubへ [Pull Request](https://github.com/sonydevworld/spresense/pull/46)
を作成し、反映いたしました。

この度はSDKへのフィードバックをありがとうございました。  
今後ともSPRESENSEをどうぞよろしくお願いいたします。

SPRESENSEサポートチーム


CC BY-SA 4.0
2020-03-16T01:46:07.413
63876
2020-03-16T01:46:07.413
29520
63701
answer