Import app manager, samples and test-tools
This commit is contained in:
105
core/shared-lib/coap/extension/coap_conversion.c
Normal file
105
core/shared-lib/coap/extension/coap_conversion.c
Normal file
@ -0,0 +1,105 @@
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
Reference in New Issue
Block a user