coap: coap server using libcoap. also scrapped.
Signed-off-by: HeshamTB <hishaminv@gmail.com>
This commit is contained in:
		
							parent
							
								
									8094b1fc77
								
							
						
					
					
						commit
						e633be8396
					
				
							
								
								
									
										48
									
								
								coap/coap-server1/common.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								coap/coap-server1/common.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,48 @@
 | 
			
		||||
/* minimal CoAP functions
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2018-2021 Olaf Bergmann <bergmann@tzi.org>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <netdb.h>
 | 
			
		||||
 | 
			
		||||
#include "common.h"
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
resolve_address(const char *host, const char *service, coap_address_t *dst) {
 | 
			
		||||
 | 
			
		||||
  struct addrinfo *res, *ainfo;
 | 
			
		||||
  struct addrinfo hints;
 | 
			
		||||
  int error, len=-1;
 | 
			
		||||
 | 
			
		||||
  memset(&hints, 0, sizeof(hints));
 | 
			
		||||
  memset(dst, 0, sizeof(*dst));
 | 
			
		||||
  hints.ai_socktype = SOCK_DGRAM;
 | 
			
		||||
  hints.ai_family = AF_UNSPEC;
 | 
			
		||||
 | 
			
		||||
  error = getaddrinfo(host, service, &hints, &res);
 | 
			
		||||
 | 
			
		||||
  if (error != 0) {
 | 
			
		||||
    fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(error));
 | 
			
		||||
    return error;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  for (ainfo = res; ainfo != NULL; ainfo = ainfo->ai_next) {
 | 
			
		||||
    switch (ainfo->ai_family) {
 | 
			
		||||
    case AF_INET6:
 | 
			
		||||
    case AF_INET:
 | 
			
		||||
      len = dst->size = ainfo->ai_addrlen;
 | 
			
		||||
      memcpy(&dst->addr.sin6, ainfo->ai_addr, dst->size);
 | 
			
		||||
      goto finish;
 | 
			
		||||
    default:
 | 
			
		||||
      ;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 finish:
 | 
			
		||||
  freeaddrinfo(res);
 | 
			
		||||
  return len;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										8
									
								
								coap/coap-server1/common.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								coap/coap-server1/common.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
			
		||||
/* minimal CoAP functions
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2018-2021 Olaf Bergmann <bergmann@tzi.org>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <coap3/coap.h>
 | 
			
		||||
 | 
			
		||||
int resolve_address(const char *host, const char *service, coap_address_t *dst);
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								coap/coap-server1/common.o
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								coap/coap-server1/common.o
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										15
									
								
								coap/coap-server1/handlers.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								coap/coap-server1/handlers.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
			
		||||
#include "handlers.h"
 | 
			
		||||
#include <coap3/resource.h>
 | 
			
		||||
 | 
			
		||||
void hnd_get_hello(coap_resource_t *resource,
 | 
			
		||||
    coap_session_t *session,
 | 
			
		||||
    const coap_pdu_t *request,
 | 
			
		||||
    const coap_string_t *query_string,
 | 
			
		||||
    coap_pdu_t *response)
 | 
			
		||||
{
 | 
			
		||||
    coap_show_pdu(LOG_WARNING, request);
 | 
			
		||||
    coap_pdu_set_code(response, COAP_RESPONSE_CODE_CONTENT);
 | 
			
		||||
    coap_add_data(response, 5, (const uint8_t *)"world");
 | 
			
		||||
    coap_show_pdu(LOG_WARNING, response);
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										12
									
								
								coap/coap-server1/handlers.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								coap/coap-server1/handlers.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
 | 
			
		||||
#include <coap3/coap.h>
 | 
			
		||||
#include <coap3/coap_forward_decls.h>
 | 
			
		||||
#include <coap3/resource.h>
 | 
			
		||||
#include <coap3/str.h>
 | 
			
		||||
 | 
			
		||||
void hnd_get_hello(
 | 
			
		||||
    coap_resource_t *resource,
 | 
			
		||||
    coap_session_t *session,
 | 
			
		||||
    const coap_pdu_t *resquest,
 | 
			
		||||
    const coap_string_t *query_string,
 | 
			
		||||
    coap_pdu_t* response);
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								coap/coap-server1/handlers.o
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								coap/coap-server1/handlers.o
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										1
									
								
								coap/coap-server1/libcoap
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
								
							
						
						
									
										1
									
								
								coap/coap-server1/libcoap
									
									
									
									
									
										Submodule
									
								
							@ -0,0 +1 @@
 | 
			
		||||
Subproject commit 1da37b9abbe871675d5939395b498324ccc8ecfe
 | 
			
		||||
							
								
								
									
										77
									
								
								coap/coap-server1/main.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								coap/coap-server1/main.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,77 @@
 | 
			
		||||
/* minimal CoAP server
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2018-2021 Olaf Bergmann <bergmann@tzi.org>
 | 
			
		||||
 * Edited by Hesham T. Banafa Mar 8, 2022 for ibs
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <gsl/gsl_matrix_uint.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
 | 
			
		||||
#include <gsl/gsl_matrix.h>
 | 
			
		||||
#include <coap3/coap.h>
 | 
			
		||||
#include "common.h"
 | 
			
		||||
#include "handlers.h"
 | 
			
		||||
 | 
			
		||||
int main(void) {
 | 
			
		||||
  coap_context_t  *ctx = NULL;
 | 
			
		||||
  coap_address_t dst;
 | 
			
		||||
  coap_resource_t *resource = NULL;
 | 
			
		||||
  coap_endpoint_t *endpoint = NULL;
 | 
			
		||||
  int result = EXIT_FAILURE;;
 | 
			
		||||
  coap_str_const_t *ruri = coap_make_str_const("hello");
 | 
			
		||||
  coap_startup();
 | 
			
		||||
 | 
			
		||||
  /* resolve destination address where server should be sent */
 | 
			
		||||
  
 | 
			
		||||
  if (resolve_address("localhost", "5683", &dst) < 0) {
 | 
			
		||||
    coap_log(LOG_CRIT, "failed to resolve address\n");
 | 
			
		||||
    goto finish;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* create CoAP context and a client session */
 | 
			
		||||
  ctx = coap_new_context(NULL);
 | 
			
		||||
 | 
			
		||||
  if (!ctx || !(endpoint = coap_new_endpoint(ctx, &dst, COAP_PROTO_UDP))) {
 | 
			
		||||
    coap_log(LOG_EMERG, "cannot initialize context\n");
 | 
			
		||||
    goto finish;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  resource = coap_resource_init(ruri, 0);
 | 
			
		||||
  // coap_register_handler(resource, COAP_REQUEST_GET,
 | 
			
		||||
  //                       [](auto, auto,
 | 
			
		||||
  //                          const coap_pdu_t *request,
 | 
			
		||||
  //                          auto,
 | 
			
		||||
  //                          coap_pdu_t *response) {
 | 
			
		||||
  //                         coap_show_pdu(LOG_WARNING, request);
 | 
			
		||||
  //                         coap_pdu_set_code(response, COAP_RESPONSE_CODE_CONTENT);
 | 
			
		||||
  //                         coap_add_data(response, 5,
 | 
			
		||||
  //                                       (const uint8_t *)"world");
 | 
			
		||||
  //                         coap_show_pdu(LOG_WARNING, response);
 | 
			
		||||
  //                       });
 | 
			
		||||
  
 | 
			
		||||
  /* From what I understand, we need to implement the coap_method_handler_t
 | 
			
		||||
      a supply a fucntion ptr to a function that takes args defined in
 | 
			
		||||
      coap_method_handler_t typedef.
 | 
			
		||||
      Holy crap this different. 
 | 
			
		||||
      This kind of typedef is similar to a java abstract class or interface..
 | 
			
		||||
      (somefunkystudd.txt)
 | 
			
		||||
      Mar 8, 2022 - H.B. */
 | 
			
		||||
  
 | 
			
		||||
  //coap_method_handler_t  hnd = &hnd_get_hello;
 | 
			
		||||
  coap_register_handler(resource, COAP_REQUEST_GET, &hnd_get_hello);
 | 
			
		||||
  coap_add_resource(ctx, resource);
 | 
			
		||||
 | 
			
		||||
  while (true) { coap_io_process(ctx, COAP_IO_WAIT); }
 | 
			
		||||
 | 
			
		||||
  result = EXIT_SUCCESS;
 | 
			
		||||
 finish:
 | 
			
		||||
 | 
			
		||||
  coap_free_context(ctx);
 | 
			
		||||
  coap_cleanup();
 | 
			
		||||
 | 
			
		||||
  return result;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								coap/coap-server1/main.o
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								coap/coap-server1/main.o
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										2
									
								
								coap/coap-server1/somefunckystuff.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								coap/coap-server1/somefunckystuff.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
			
		||||
https://stackoverflow.com/questions/840501/how-do-function-pointers-in-c-work
 | 
			
		||||
https://stackoverflow.com/questions/3674200/what-does-a-typedef-with-parenthesis-like-typedef-int-fvoid-mean-is-it-a
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user