mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-02-08 16:05:07 +00:00
106 lines
3.2 KiB
C
106 lines
3.2 KiB
C
![]() |
/*
|
||
|
* Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
|
||
|
#include "coap_ext.h"
|
||
|
|
||
|
char * coap_get_full_url_alloc(coap_packet_t * request)
|
||
|
{
|
||
|
const char *url = NULL;
|
||
|
const char * query = NULL;
|
||
|
int url_len = coap_get_header_uri_path(request, &url);
|
||
|
int query_len = coap_get_header_uri_query(request, &query);
|
||
|
|
||
|
if (url_len == 0)
|
||
|
return NULL;
|
||
|
|
||
|
char * url_alloc = (char*) bh_malloc(url_len + 1 + query_len + 1);
|
||
|
memcpy(url_alloc, url, url_len);
|
||
|
url_alloc[url_len] = 0;
|
||
|
|
||
|
// make the url looks like /abc?e=f
|
||
|
if (query_len != 0) {
|
||
|
strcat(url_alloc, "&");
|
||
|
memcpy(url_alloc + strlen(url_alloc), query, query_len);
|
||
|
url_alloc[url_len + 1 + query_len] = 0;
|
||
|
}
|
||
|
|
||
|
return url_alloc;
|
||
|
}
|
||
|
|
||
|
void convert_request_to_coap_packet(request_t * req, coap_packet_t * packet)
|
||
|
{
|
||
|
coap_init_message(packet, COAP_TYPE_NON, req->action, req->mid);
|
||
|
coap_set_token(packet, (uint8_t *) &req->mid, sizeof(req->mid));
|
||
|
coap_set_header_content_format(packet, req->fmt);
|
||
|
|
||
|
coap_set_header_uri_path(packet, req->url);
|
||
|
|
||
|
coap_set_payload(packet, req->payload, req->payload_len);
|
||
|
|
||
|
packet->mid = req->mid;
|
||
|
}
|
||
|
|
||
|
void convert_response_to_coap_packet(response_t * response,
|
||
|
coap_packet_t * packet)
|
||
|
{
|
||
|
coap_init_message(packet, COAP_TYPE_NON, response->status, response->mid);
|
||
|
coap_set_token(packet, (uint8_t *) &response->mid, sizeof(response->mid));
|
||
|
coap_set_header_content_format(packet, response->fmt);
|
||
|
coap_set_payload(packet, response->payload, response->payload_len);
|
||
|
|
||
|
packet->mid = response->mid;
|
||
|
}
|
||
|
|
||
|
// return: the length of url.
|
||
|
// note: the url is probably not end with 0 due to coap packing design.
|
||
|
int convert_coap_packet_to_request(coap_packet_t *packet, request_t *request)
|
||
|
{
|
||
|
const char *url = NULL;
|
||
|
int url_len = coap_get_header_uri_path(packet, &url);
|
||
|
|
||
|
memset(request, 0, sizeof(*request));
|
||
|
|
||
|
request->action = packet->code;
|
||
|
request->fmt = packet->content_format;
|
||
|
if (packet->token_len == 4) {
|
||
|
request->mid = *((unsigned long *) packet->token);
|
||
|
} else {
|
||
|
request->mid = packet->mid;
|
||
|
}
|
||
|
request->payload = packet->payload;
|
||
|
request->payload_len = packet->payload_len;
|
||
|
request->url = (char *)url;
|
||
|
return url_len;
|
||
|
}
|
||
|
|
||
|
void convert_coap_packet_to_response(coap_packet_t *packet,
|
||
|
response_t *response)
|
||
|
{
|
||
|
memset(response, 0, sizeof(*response));
|
||
|
|
||
|
response->status = packet->code;
|
||
|
response->fmt = packet->content_format;
|
||
|
if (packet->token_len == 4) {
|
||
|
response->mid = *((unsigned long *) packet->token);
|
||
|
} else {
|
||
|
response->mid = packet->mid;
|
||
|
}
|
||
|
|
||
|
response->payload = packet->payload;
|
||
|
response->payload_len = packet->payload_len;
|
||
|
return;
|
||
|
}
|