X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fconnectivity%2Finc%2Fcaadapterutils.h;h=cb9692f541b4243a23e9f652888f43780bfdc0f9;hb=refs%2Ftags%2Fsubmit%2Ftizen_4.0%2F20171010.021147;hp=5822383019f3dbf6f51ac8e42c9e6075de91581d;hpb=9015fb1a75f3b43b57153b840f73a2ebc4bb8a63;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/connectivity/inc/caadapterutils.h b/resource/csdk/connectivity/inc/caadapterutils.h index 5822383..cb9692f 100644 --- a/resource/csdk/connectivity/inc/caadapterutils.h +++ b/resource/csdk/connectivity/inc/caadapterutils.h @@ -24,12 +24,33 @@ * This file contains common utility function for CA transport adaptors. */ -#ifndef _CA_ADAPTER_UTILS_H_ -#define _CA_ADAPTER_UTILS_H_ +#ifndef CA_ADAPTER_UTILS_H_ +#define CA_ADAPTER_UTILS_H_ + +#include "iotivity_config.h" + +#include +#ifdef __ANDROID__ +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +#if defined(HAVE_WINSOCK2_H) && defined(HAVE_WS2TCPIP_H) +#include +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif #include "cacommon.h" #include "logger.h" -#include "pdu.h" +#include +#include "uarraylist.h" +#include "cacommonutil.h" #ifdef __cplusplus extern "C" @@ -37,105 +58,269 @@ extern "C" #endif /** - * @def VERIFY_NON_NULL - * @brief Macro to verify the validity of input argument + * Length of network interface name. */ -#define VERIFY_NON_NULL(arg, log_tag, log_message) \ - if (NULL == arg ){ \ - OIC_LOG_V(ERROR, log_tag, "Invalid input:%s", log_message); \ - return CA_STATUS_INVALID_PARAM; \ - } \ +#define CA_INTERFACE_NAME_SIZE 16 /** - * @def VERIFY_NON_NULL_RET - * @brief Macro to verify the validity of input argument + * Macro to allocate memory for ipv4 address in the form of uint8_t. */ -#define VERIFY_NON_NULL_RET(arg, log_tag, log_message,ret) \ - if (NULL == arg ){ \ - OIC_LOG_V(ERROR, log_tag, "Invalid input:%s", log_message); \ - return ret; \ - } \ +#define IPV4_ADDR_ONE_OCTECT_LEN 4 +#ifdef SINGLE_THREAD /** - * @def VERIFY_NON_NULL_VOID - * @brief Macro to verify the validity of input argument + * Network Interface Information. Only needed for Arduino. */ -#define VERIFY_NON_NULL_VOID(arg, log_tag, log_message) \ - if (NULL == arg ){ \ - OIC_LOG_V(ERROR, log_tag, "Invalid input:%s", log_message); \ - return; \ - } \ +typedef struct +{ + char ipAddress[CA_IPADDR_SIZE]; /**< Address of the interface. **/ + char subnetMask[CA_IPADDR_SIZE]; /**< Maintains interface subnetmask. **/ + char interfaceName[CA_INTERFACE_NAME_SIZE]; /**< Interface name. **/ +} CANetInfo_t; +#endif /** - * @def IPV4_ADDR_ONE_OCTECT_LEN - * @brief Macro to allocate memory for ipv4 address in the form of uint8_t. + * unicast and multicast server information. */ -#define IPV4_ADDR_ONE_OCTECT_LEN 4 +typedef struct +{ + int socketFd; /**< Socket descriptor. **/ + CAEndpoint_t endpoint; /**< endpoint description. **/ + bool isServerStarted; /**< Indicates server started. **/ + bool isMulticastServer; /**< Indicates multicast server. **/ + char ifAddr[CA_IPADDR_SIZE]; /**< Address of the multicast interface. **/ + char interfaceName[CA_INTERFACE_NAME_SIZE]; /**< Interface Name. **/ + char subNetMask[CA_IPADDR_SIZE]; /**< Subnet Mask. **/ +} CAServerInfo_t; /** - * @brief To log the PDU data + * To parse the IP address and port from "ipaddress:port". + * @param[in] ipAddrStr IP address to be parsed. + * @param[out] ipAddr Parsed IP address. + * @param[in] ipAddr Buffer length for parsed IP address. + * @param[out] port Parsed Port number. + * @return ::CA_STATUS_OK or Appropriate error code. */ -void CALogPDUData(coap_pdu_t *pdu); +CAResult_t CAParseIPv4AddressInternal(const char *ipAddrStr, uint8_t *ipAddr, + size_t ipAddrLen, uint16_t *port); /** - * @fn CAAdapterCreateLocalEndpoint - * @brief Create CALocalConnectivity_t instance. + * Check if two ip address belong to same subnet. + * @param[in] ipAddress1 IP address to be checked. + * @param[in] ipAddress2 IP address to be checked. + * @param[in] netMask Subnet mask. + * @return true if same subnet and false if not same subnet. + */ +bool CAAdapterIsSameSubnet(const char *ipAddress1, const char *ipAddress2, + const char *netMask); +/** + * Used to check the multicast server is running or not. + * + * @param[in] serverInfoList Server information list. + * @param[in] ipAddress Interface address of the server. + * @param[in] multicastAddress Multicast address of the server. + * @param[in] port Port number of the server. + * + * @return true or false. */ -CALocalConnectivity_t *CAAdapterCreateLocalEndpoint(CAConnectivityType_t type, - const char *address); +bool CAIsMulticastServerStarted(const u_arraylist_t *serverInfoList, const char *ipAddress, + const char *multicastAddress, uint16_t port); /** - * @fn CAAdapterCopyLocalEndpoint - * @brief Create CALocalConnectivity_t duplicate instance. + * Used to check the unicast server is running or not. + * + * @param[in] serverInfoList Server information list. + * @param[in] ipAddress Ip address of the server. + * @param[in] port Port number of the server. + * + * @return true or false. + */ +bool CAIsUnicastServerStarted(const u_arraylist_t *serverInfoList, const char *ipAddress, + uint16_t port); + +/** + * Used to get the port number based on given information. + * + * @param[in] serverInfoList Server information list. + * @param[in] ipAddress Ip address of the server. + * @param[in] isSecured specifies whether to get secured or normal unicast server port. + * + * @return positive value on success and 0 on error. */ -CALocalConnectivity_t *CAAdapterCopyLocalEndpoint(const CALocalConnectivity_t *connectivity); +uint16_t CAGetServerPort(const u_arraylist_t *serverInfoList, const char *ipAddress, + bool isSecured); /** - * @fn CAAdapterFreeLocalEndpoint - * @brief Deallocate CALocalConnectivity_t instance. + * Used to get the socket fd for given server information. + * + * @param[in] serverInfoList Server information list. + * @param[in] isMulticast To check whether it is multicast server or not. + * @param[in] endpoint network address + + * @return positive value on success and -1 on error. */ -void CAAdapterFreeLocalEndpoint(CALocalConnectivity_t *localEndPoint); +int CAGetSocketFdForUnicastServer(const u_arraylist_t *serverInfoList, + bool isMulticast, const CAEndpoint_t *endpoint); /** - * @fn CAAdapterCreateRemoteEndpoint - * @brief Allocate CARemoteEndpoint_t instance. + * Used to add the server information into serverinfo list. + * + * @param[in/out] serverInfoList server information list. + * @param[in] info server informations like ip, port. + * + * @return ::CA_STATUS_OK or Appropriate error code. + * @retval ::CA_STATUS_OK Successful. + * @retval ::CA_STATUS_INVALID_PARAM Invalid input data. + * @retval ::CA_STATUS_FAILED Initialization failed. */ -CARemoteEndpoint_t *CAAdapterCreateRemoteEndpoint(CAConnectivityType_t type, - const char *address, const char *resourceUri); +CAResult_t CAAddServerInfo(u_arraylist_t *serverInfoList, CAServerInfo_t *info); /** - * @fn CAAdapterCopyRemoteEndpoint - * @brief Create CARemoteEndpoint_t duplicate instance. + * Used to remove the server information based on socket fd from server info list. + * + * @param[in/out] serverInfoList server information list. + * @param[in] sockFd Socket descriptor. */ -CARemoteEndpoint_t *CAAdapterCopyRemoteEndpoint( - const CARemoteEndpoint_t *remoteEndpoint); +void CARemoveServerInfo(u_arraylist_t *serverInfoList, int sockFd); /** - * @fn CAAdapterFreeRemoteEndpoint - * @brief Deallocate CARemoteEndpoint_t instance. + * Used to clear the memory of network interface list. + * Memory pointed by infoList will become invalid after this function call. + * + * @param[in] infoList Network interface list. */ -void CAAdapterFreeRemoteEndpoint(CARemoteEndpoint_t *remoteEndPoint); +void CAClearNetInterfaceInfoList(u_arraylist_t *infoList); /** - * @fn CAParseIPv4AddressInternal - * @brief To parse the IP address and port from "ipaddress:port" - * @param ipAddrStr [IN] IP address to be parsed - * @param ipAddr [OUT] Parsed IP address - * @param ipAddr [IN] Buffer length for parsed IP address - * @param port [OUT] Parsed Port number - * @return #CA_STATUS_OK or Appropriate error code + * Used to clear the memory of server info list. + * Memory pointed by serverInfoList will become invalid after this function call. + * + * @param[in] infoList Server information list. */ -CAResult_t CAParseIPv4AddressInternal(const char *ipAddrStr, uint8_t *ipAddr, - size_t ipAddrLen, uint16_t *port); +void CAClearServerInfoList(u_arraylist_t *serverInfoList); +#ifndef WITH_ARDUINO /** - * @fn CAAdapterIsSameSubnet - * @brief Check if two ip address belong to same subnet + * Convert address from binary to string. + * @param[in] sockAddr IP address info. + * @param[in] sockAddrLen size of sockAddr. + * @param[out] host address string (must be CA_IPADDR_SIZE). + * @param[out] port host order port number. */ -bool CAAdapterIsSameSubnet(const char *ipAddress1, const char *ipAddress2, - const char *netMask); +void CAConvertAddrToName(const struct sockaddr_storage *sockAddr, socklen_t sockAddrLen, + char *host, uint16_t *port); + +/** + * Convert address from string to binary. + * @param[in] host address string. + * @param[in] port host order port number. + * @param[out] ipaddr IP address info. + */ +void CAConvertNameToAddr(const char *host, uint16_t port, struct sockaddr_storage *sockaddr); +#endif /* WITH_ARDUINO */ + +#ifdef __ANDROID__ +/** + * To set context of JNI Application. + * This must be called by the Android API before CA Initialization. + * @param[in] env JNI interface pointer. + * @param[in] context context object. + */ +void CANativeJNISetContext(JNIEnv *env, jobject context); + +/** + * To set jvm object. + * This must be called by the Android API before CA Initialization. + * @param[in] jvm jvm object. + */ +void CANativeJNISetJavaVM(JavaVM *jvm); + +/** + * To get context. + * Called by adapters to get Application context. + * @return context object. + */ +jobject CANativeJNIGetContext(); + +/** + * To get JVM object. + * Called from adapters to get JavaVM object. + * @return JVM object. + */ +JavaVM *CANativeJNIGetJavaVM(); + +/** + * To set Activity to JNI. + * This must be called by the Android API before CA Initialization. + * @param[in] env JNI Environment pointer. + * @param[in] activity Activity object. + */ +void CANativeSetActivity(JNIEnv *env, jobject activity); + +/** + * To get Activity. + * Called from adapters to get Activity. + * @return Activity object. + */ +jobject *CANativeGetActivity(); + +/** + * get method ID for method Name and class + * @param[in] env JNI interface pointer. + * @param[in] className android class. + * @param[in] methodName android method name. + * @param[in] methodFormat method type of methodName. + * @return jmethodID iD of the method. + */ +jmethodID CAGetJNIMethodID(JNIEnv *env, const char* className, + const char* methodName, + const char* methodFormat); + +/** + * check JNI exception occurrence + * @param[in] env JNI interface pointer. + * @return true(occurrence) or false(no occurrence). + */ +bool CACheckJNIException(JNIEnv *env); + +/** + * To Delete other Global References + * Called during CATerminate to remove global references + */ +void CADeleteGlobalReferences(); + +#endif + +#ifndef WITH_ARDUINO +/** + * print send state in the adapter. + * @param[in] adapter transport adapter type. + * @param[in] addr remote address. + * @param[in] port port. + * @param[in] sentLen sent data length. + * @param[in] isSuccess sent state. + * @param[in] message detailed message. + */ +void CALogSendStateInfo(CATransportAdapter_t adapter, + const char *addr, uint16_t port, ssize_t sentLen, + bool isSuccess, const char* message); + +/** + * print adapter state in the adapter. + * @param[in] adapter transport adapter type. + * @param[in] state adapter state. + */ +void CALogAdapterStateInfo(CATransportAdapter_t adapter, CANetworkStatus_t state); + +/** + * print adapter type name in the adapter. + * @param[in] adapter transport adapter type. + */ +void CALogAdapterTypeInfo(CATransportAdapter_t adapter); +#endif + #ifdef __cplusplus } /* extern "C" */ #endif -#endif // _CA_ADAPTER_UTILS_H_ +#endif /* CA_ADAPTER_UTILS_H_ */