nkjnm
Dependencies: MAX44000 nexpaq_mdk
Fork of LED_Demo by
socket_api.h
00001 /* 00002 * PackageLicenseDeclared: Apache-2.0 00003 * Copyright (c) 2015 ARM Limited 00004 * 00005 * Licensed under the Apache License, Version 2.0 (the "License"); 00006 * you may not use this file except in compliance with the License. 00007 * You may obtain a copy of the License at 00008 * 00009 * http://www.apache.org/licenses/LICENSE-2.0 00010 * 00011 * Unless required by applicable law or agreed to in writing, software 00012 * distributed under the License is distributed on an "AS IS" BASIS, 00013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00014 * See the License for the specific language governing permissions and 00015 * limitations under the License. 00016 */ 00017 #ifndef __MBED_NET_SOCKET_ABSTRACT_SOCKET_API_H__ 00018 #define __MBED_NET_SOCKET_ABSTRACT_SOCKET_API_H__ 00019 00020 #include <stdint.h> 00021 #include "socket_types.h" 00022 #ifdef __cplusplus 00023 extern "C" { 00024 #endif 00025 00026 #ifndef SOCKET_MAX_STACKS 00027 #define SOCKET_MAX_STACKS 2 00028 #endif 00029 00030 typedef socket_error_t (*socket_init)(); 00031 typedef socket_error_t (*socket_create)(struct socket *socket, 00032 const socket_address_family_t af, const socket_proto_family_t pf, 00033 socket_api_handler_t const handler); 00034 typedef socket_error_t (*socket_destroy)(struct socket *socket); 00035 typedef socket_error_t (*socket_close)(struct socket *socket); 00036 typedef socket_api_handler_t (*socket_periodic_task)(const struct socket * socket); 00037 typedef uint32_t (*socket_periodic_interval)(const struct socket * socket); 00038 typedef socket_error_t (*socket_resolve)(struct socket *socket, const char *address); 00039 typedef socket_error_t (*socket_connect)(struct socket *sock, const struct socket_addr *address, const uint16_t port); 00040 typedef socket_error_t (*socket_bind)(struct socket *socket, const struct socket_addr *address, const uint16_t port); 00041 typedef socket_error_t (*socket_str2addr)(const struct socket *socket, struct socket_addr *addr, const char *address); 00042 typedef socket_error_t (*socket_start_listen)(struct socket *socket, const uint32_t backlog); 00043 typedef socket_error_t (*socket_stop_listen)(struct socket *socket); 00044 typedef socket_error_t (*socket_accept)(struct socket *sock, socket_api_handler_t handler); 00045 typedef socket_error_t (*socket_reject)(struct socket *sock); 00046 typedef socket_error_t (*socket_send)(struct socket *socket, const void * buf, const size_t len); 00047 typedef socket_error_t (*socket_send_to)(struct socket *socket, const void * buf, const size_t len, const struct socket_addr *addr, const uint16_t port); 00048 typedef socket_error_t (*socket_recv)(struct socket *socket, void * buf, size_t *len); 00049 typedef socket_error_t (*socket_recv_from)(struct socket *socket, void * buf, size_t *len, struct socket_addr *addr, uint16_t *port); 00050 00051 typedef socket_error_t (*socket_get_local_addr)(const struct socket *socket, struct socket_addr *addr); 00052 typedef socket_error_t (*socket_get_remote_addr)(const struct socket *socket, struct socket_addr *addr); 00053 typedef socket_error_t (*socket_get_local_port)(const struct socket *socket, uint16_t *port); 00054 typedef socket_error_t (*socket_get_remote_port)(const struct socket *socket, uint16_t *port); 00055 00056 typedef uint8_t (*socket_is_connected)(const struct socket *socket); 00057 typedef uint8_t (*socket_is_bound)(const struct socket *socket); 00058 00059 struct socket_api { 00060 socket_stack_t stack; 00061 uint32_t version; 00062 socket_init init; 00063 socket_create create; 00064 socket_destroy destroy; 00065 socket_close close; 00066 socket_periodic_task periodic_task; 00067 socket_periodic_interval periodic_interval; 00068 socket_resolve resolve; 00069 socket_connect connect; 00070 socket_str2addr str2addr; 00071 socket_bind bind; 00072 socket_start_listen start_listen; 00073 socket_stop_listen stop_listen; 00074 socket_accept accept; 00075 socket_reject reject; 00076 socket_send send; 00077 socket_send_to send_to; 00078 socket_recv recv; 00079 socket_recv_from recv_from; 00080 socket_is_connected is_connected; 00081 socket_is_bound is_bound; 00082 socket_get_local_addr get_local_addr; 00083 socket_get_remote_addr get_remote_addr; 00084 socket_get_local_port get_local_port; 00085 socket_get_remote_port get_remote_port; 00086 }; 00087 #define SOCKET_API_FIRST_PTR init 00088 #define SOCKET_API_LAST_PTR get_remote_port 00089 00090 socket_error_t socket_register_stack(const struct socket_api * api); 00091 const char * socket_strerror(const socket_error_t err); 00092 const struct socket_api * socket_get_api(const socket_stack_t stack); 00093 00094 static inline int socket_addr_is_ipv4(const struct socket_addr *addr) 00095 { 00096 if ((addr->ipv6be[0] == 0) && 00097 (addr->ipv6be[1] == 0) && 00098 (addr->ipv6be[2] == 0)) { 00099 return 1; 00100 } else { 00101 return 0; 00102 } 00103 } 00104 static inline int socket_addr_is_any(const struct socket_addr *addr) 00105 { 00106 if ((addr->ipv6be[0] == 0) && 00107 (addr->ipv6be[1] == 0) && 00108 (addr->ipv6be[2] == 0) && 00109 (addr->ipv6be[3] == 0)) { 00110 return 1; 00111 } else { 00112 return 0; 00113 } 00114 } 00115 static inline void socket_addr_set_ipv4_addr(struct socket_addr *addr, uint32_t ipv4addr) 00116 { 00117 addr->ipv6be[0] = 0; 00118 addr->ipv6be[1] = 0; 00119 addr->ipv6be[2] = 0; 00120 addr->ipv6be[3] = ipv4addr; 00121 } 00122 static inline uint32_t socket_addr_get_ipv4_addr(const struct socket_addr *addr) 00123 { 00124 if (!socket_addr_is_ipv4(addr)) { 00125 return 0; 00126 } 00127 return addr->ipv6be[3]; 00128 } 00129 static inline const uint32_t * socket_addr_get_ipv4_addrp(const struct socket_addr *addr) 00130 { 00131 if (!socket_addr_is_ipv4(addr)) { 00132 return NULL; 00133 } 00134 return &addr->ipv6be[3]; 00135 } 00136 static inline void socket_addr_set_any(struct socket_addr *addr) 00137 { 00138 addr->ipv6be[0] = 0; 00139 addr->ipv6be[1] = 0; 00140 addr->ipv6be[2] = 0; 00141 addr->ipv6be[3] = 0; 00142 } 00143 00144 static inline void socket_addr_copy(struct socket_addr *dest, const struct socket_addr *src) 00145 { 00146 (dest)->ipv6be[0] = (src)->ipv6be[0]; 00147 (dest)->ipv6be[1] = (src)->ipv6be[1]; 00148 (dest)->ipv6be[2] = (src)->ipv6be[2]; 00149 (dest)->ipv6be[3] = (src)->ipv6be[3]; 00150 } 00151 static inline int socket_addr_cmp(const struct socket_addr *a, const struct socket_addr *b) 00152 { 00153 return 00154 a->ipv6be[0] != b->ipv6be[0] || 00155 a->ipv6be[1] != b->ipv6be[1] || 00156 a->ipv6be[2] != b->ipv6be[2] || 00157 a->ipv6be[3] != b->ipv6be[3]; 00158 } 00159 00160 #ifdef __cplusplus 00161 } 00162 #endif 00163 00164 #endif /* __MBED_NET_SOCKET_ABSTRACT_SOCKET_API_H__ */
Generated on Tue Jul 12 2022 17:03:53 by
1.7.2
