現在、マルチパートメッセージを作成するのにnghttp2
を使用しようとしています。メッセージは次のようにstrcutureでなければなりません。nghttp2マルチパートPOSTメッセージ
私は私のデータのための私のHTTP/2ヘッダとしてnva
、及びnghttp2_data_provider *data_prd
と、nghttp2_submit_request
(here)関数を使用する必要があります。しかし、私はまだ正確に2つのメッセージ(2つのメッセージヘッダー)を作成することができます理解していない。
更新:
それは私が私が私のソースコードに考えていたかを説明することは可能ですか?下記を参照してください。ここでは、nghttp2_data_provider
を使用してオーディオファイルを開き、バッファに書き込みます。私を混同しては何
ssize_t data_prd_read_callback(
nghttp2_session *session, int32_t stream_id, uint8_t *buf, size_t length,
uint32_t *data_flags, nghttp2_data_source *source, void *user_data)
{
printf("[INFO] C ----------------------------> S (DATA post body), length:%zu\n", length);
int fd = source->fd;
ssize_t r;
// writting my opened audio file into buffer
while ((r = read(fd, buf, length)) == -1 && errno == EINTR);
printf("stream_id:%d, nread:%zu\r\n", stream_id, r);
return nread;
}
void submit_postAudio(http2_session_data *session_data) {
int32_t stream_id;
http2_stream_data *stream_data = session_data->stream_data[STREAM_ID_REQUESTAUDIO];
const char *uri = stream_data->uri;
const struct http_parser_url *u = stream_data->u;
char byLength = 0;
const nghttp2_nv hdrs[] = {
MAKE_NV(":method", "POST"), MAKE_NV_CS(":path", stream_data->path),
MAKE_NV(":scheme", "https"), MAKE_NV("accept", "*/*"),
MAKE_NV_CS("authorization", stream_data->access_token),
MAKE_NV("content-type", "multipart/form-data; boundary=abcdefg123")
};
fprintf(stderr, "Request headers:\n");
print_headers(stderr, hdrs, ARRLEN(hdrs));
int fileDescriptor = open ("/my_audio.wmv", O_APPEND); // open my audio file
nghttp2_data_provider data_prd;
data_prd.source.fd = fileDescriptor // set the file descriptor
data_prd.source.ptr = NULL;
data_prd.read_callback = data_prd_read_callback;
stream_id = nghttp2_submit_request(session_data->session, NULL, hdrs,
ARRLEN(hdrs), &data_prd, stream_data);
if (stream_id < 0) {
errx(1, "Could not submit HTTP request: %s", nghttp2_strerror(stream_id));
}
stream_data->stream_id = stream_id;
}
は 1)どのように私はオーディオに(メッセージヘッダは、より具体的には)ヘッダーを追加します。 2)Jsonファイルの後ろにどのように追加しますか?
空行:
したがって、この場合にはメッセージ全体は次のようになります。 – Alex
@Alex ups、私は間違ってCRLF表現を削除すると削除されました – K3N
あなたの答えをありがとう。 'ssize_t data_prd_read_callback( nghttp2_session *セッション、int32_t stream_id、uint8_t * buf、size_t length、 uint32_t * data_flags、nghttp2_data_source * source、void * user_data)'から、バッファ( 'uint8_t *')を使ってmyペイロードへ。あなたは、この形式で正しい文字列と改行を使ってcharを書いてから、オーディオファイルをフォローすることを提案していますか? – wrek