X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fstack%2Fsamples%2Flinux%2FSimpleClientServer%2Focclientcoll.cpp;h=94e9e14875f6367e4e09e1a3fa14458bca457a7c;hb=8c01dff2c5bc5496f7dc1632c498943ec6ecb015;hp=f609aea383f9bd313e046497a8445361ac21ed78;hpb=935fdb9b67b6c10d007e652e9e2e028fd6ccfe09;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/stack/samples/linux/SimpleClientServer/occlientcoll.cpp b/resource/csdk/stack/samples/linux/SimpleClientServer/occlientcoll.cpp index f609aea..94e9e14 100644 --- a/resource/csdk/stack/samples/linux/SimpleClientServer/occlientcoll.cpp +++ b/resource/csdk/stack/samples/linux/SimpleClientServer/occlientcoll.cpp @@ -26,11 +26,12 @@ #include #include #include +#include "ocpayload.h" #include "logger.h" const char *getResult(OCStackResult result); std::string getIPAddrTBServer(OCClientResponse * clientResponse); std::string getPortTBServer(OCClientResponse * clientResponse); -std::string getQueryStrForGetPut(const char * responsePayload); +std::string getQueryStrForGetPut(); #define TAG PCF("occlient") #define DEFAULT_CONTEXT_VALUE 0x99 @@ -53,7 +54,18 @@ typedef enum MAX_TESTS } CLIENT_TEST; +/** + * List of connectivity types that can be initiated from the client + * Required for user input validation + */ +typedef enum { + CT_ADAPTER_DEFAULT = 0, + CT_IP, + MAX_CT +} CLIENT_CONNECTIVITY_TYPE; + unsigned static int TEST = TEST_INVALID; +unsigned static int CONNECTIVITY = 0; typedef struct { @@ -74,12 +86,11 @@ testToTextMap queryInterface[] = { {"?if=oic.if.ll", TEST_PUT_LINK_LIST}, }; -static std::string putPayload = "{\"state\":\"off\",\"power\":\"0\"}"; -//The following variable determines the interface protocol (IPv4, IPv6, etc) -//to be used for sending unicast messages. Default set to IPv4. -static OCConnectivityType OC_CONNTYPE = OC_IPV4; -static const char * MULTICAST_RESOURCE_DISCOVERY_QUERY = "/oc/core"; +//The following variable determines the interface protocol (IP, etc) +//to be used for sending unicast messages. Default set to IP. +static OCConnectivityType OC_CONNTYPE = CT_ADAPTER_IP; +static const char * MULTICAST_RESOURCE_DISCOVERY_QUERY = "/oic/res"; // The handle for the observe registration OCDoHandle gObserveDoHandle; @@ -104,10 +115,27 @@ int InitPutRequest(OCClientResponse * clientResponse); int InitGetRequest(OCClientResponse * clientResponse); int InitDiscovery(); +OCPayload* putPayload() +{ + OCRepPayload* payload = OCRepPayloadCreate(); + + if(!payload) + { + std::cout << "Failed to create put payload object"< -c "); - OC_LOG(INFO, TAG, "-c <0|1> : IPv4/IPv6 (IPv6 not currently supported)"); + OC_LOG(INFO, TAG, "-c 0 : Default auto-selection"); + OC_LOG(INFO, TAG, "-c 1 : IP Connectivity Type"); OC_LOG(INFO, TAG, "Test Case 1 : Discover Resources && Initiate GET Request on an "\ "available resource using default interface."); OC_LOG(INFO, TAG, "Test Case 2 : Discover Resources && Initiate GET Request on an "\ @@ -138,7 +166,7 @@ OCStackApplicationResult putReqCB(void* ctx, OCDoHandle handle, OCClientResponse if(ctx == (void*)DEFAULT_CONTEXT_VALUE) { OC_LOG_V(INFO, TAG, "Callback Context for PUT query recvd successfully"); - OC_LOG_V(INFO, TAG, "JSON = %s =============> Discovered", clientResponse->resJSONPayload); + OC_LOG_PAYLOAD(INFO, TAG, clientResponse->payload); } return OC_STACK_KEEP_TRANSACTION; @@ -154,13 +182,13 @@ OCStackApplicationResult getReqCB(void* ctx, OCDoHandle handle, OCClientResponse if(clientResponse->sequenceNumber == 0) { OC_LOG_V(INFO, TAG, "Callback Context for GET query recvd successfully"); - OC_LOG_V(INFO, TAG, "Fnd' Rsrc': %s", clientResponse->resJSONPayload); + OC_LOG_PAYLOAD(INFO, TAG, clientResponse->payload); } else { OC_LOG_V(INFO, TAG, "Callback Context for Get recvd successfully %d", gNumObserveNotifies); - OC_LOG_V(INFO, TAG, "Fnd' Rsrc': %s", clientResponse->resJSONPayload); + OC_LOG_PAYLOAD(INFO, TAG, clientResponse->payload);; gNumObserveNotifies++; if (gNumObserveNotifies == 3) { @@ -183,9 +211,6 @@ OCStackApplicationResult getReqCB(void* ctx, OCDoHandle handle, OCClientResponse OCStackApplicationResult discoveryReqCB(void* ctx, OCDoHandle handle, OCClientResponse * clientResponse) { - uint8_t remoteIpAddr[4]; - uint16_t remotePortNu; - OC_LOG(INFO, TAG, "Entering discoveryReqCB (Application Layer CB)"); OC_LOG_V(INFO, TAG, "StackResult: %s", @@ -196,14 +221,13 @@ OCStackApplicationResult discoveryReqCB(void* ctx, OCDoHandle handle, OC_LOG_V(INFO, TAG, "Callback Context recvd successfully"); } - OCDevAddrToIPv4Addr((OCDevAddr *) clientResponse->addr, remoteIpAddr, - remoteIpAddr + 1, remoteIpAddr + 2, remoteIpAddr + 3); - OCDevAddrToPort((OCDevAddr *) clientResponse->addr, &remotePortNu); - OC_LOG_V(INFO, TAG, - "Device =============> Discovered %s @ %d.%d.%d.%d:%d", - clientResponse->resJSONPayload, remoteIpAddr[0], remoteIpAddr[1], - remoteIpAddr[2], remoteIpAddr[3], remotePortNu); + "Device =============> Discovered @ %s:%d", + clientResponse->devAddr.addr, + clientResponse->devAddr.port); + OC_LOG_PAYLOAD(INFO, TAG, clientResponse->payload); + + OC_CONNTYPE = clientResponse->connType; if(TEST == TEST_UNKNOWN_RESOURCE_GET_DEFAULT || TEST == TEST_UNKNOWN_RESOURCE_GET_BATCH ||\ TEST == TEST_UNKNOWN_RESOURCE_GET_LINK_LIST) @@ -223,8 +247,8 @@ int InitGetRequestToUnavailableResource(OCClientResponse * clientResponse) OCStackResult ret; OCCallbackData cbData; std::ostringstream getQuery; - getQuery << "coap://" << getIPAddrTBServer(clientResponse) << ":" << - getPortTBServer(clientResponse) << "/SomeUnknownResource"; + getQuery << "coap://" << clientResponse->devAddr.addr << ":" << + clientResponse->devAddr.port << "/SomeUnknownResource"; cbData.cb = getReqCB; cbData.context = (void*)DEFAULT_CONTEXT_VALUE; cbData.cd = NULL; @@ -245,13 +269,14 @@ int InitObserveRequest(OCClientResponse * clientResponse) OCCallbackData cbData; OCDoHandle handle; std::ostringstream obsReg; - obsReg << "coap://" << getIPAddrTBServer(clientResponse) << ":" << - getPortTBServer(clientResponse) << - getQueryStrForGetPut(clientResponse->resJSONPayload); + obsReg << "coap://" << clientResponse->devAddr.addr << ":" << + clientResponse->devAddr.addr << + getQueryStrForGetPut(); cbData.cb = getReqCB; cbData.context = (void*)DEFAULT_CONTEXT_VALUE; cbData.cd = NULL; - OC_LOG_V(INFO, TAG, "OBSERVE payload from client = %s ", putPayload.c_str()); + OC_LOG_V(INFO, TAG, "OBSERVE payload from client ="); + OC_LOG_PAYLOAD(INFO, TAG, putPayload()); ret = OCDoResource(&handle, OC_REST_OBSERVE, obsReg.str().c_str(), 0, 0, OC_CONNTYPE, OC_LOW_QOS, &cbData, NULL, 0); @@ -273,15 +298,16 @@ int InitPutRequest(OCClientResponse * clientResponse) OCCallbackData cbData; //* Make a PUT query*/ std::ostringstream getQuery; - getQuery << "coap://" << getIPAddrTBServer(clientResponse) << ":" << - getPortTBServer(clientResponse) << + getQuery << "coap://" << clientResponse->devAddr.addr << ":" << + clientResponse->devAddr.port << "/a/room" << queryInterface[TEST].text; cbData.cb = putReqCB; cbData.context = (void*)DEFAULT_CONTEXT_VALUE; cbData.cd = NULL; - OC_LOG_V(INFO, TAG, "PUT payload from client = %s ", putPayload.c_str()); + OC_LOG_V(INFO, TAG, "PUT payload from client = "); + OC_LOG_PAYLOAD(INFO, TAG, putPayload()); - ret = OCDoResource(NULL, OC_REST_PUT, getQuery.str().c_str(), 0, putPayload.c_str(), + ret = OCDoResource(NULL, OC_REST_PUT, getQuery.str().c_str(), 0, putPayload(), OC_CONNTYPE, OC_LOW_QOS, &cbData, NULL, 0); if (ret != OC_STACK_OK) { @@ -296,17 +322,10 @@ int InitGetRequest(OCClientResponse * clientResponse) OCStackResult ret; OCCallbackData cbData; - uint8_t remoteIpAddr[4]; - uint16_t remotePortNu; - - OCDevAddrToIPv4Addr((OCDevAddr *) clientResponse->addr, remoteIpAddr, - remoteIpAddr + 1, remoteIpAddr + 2, remoteIpAddr + 3); - OCDevAddrToPort((OCDevAddr *) clientResponse->addr, &remotePortNu); - //* Make a GET query*/ std::ostringstream getQuery; - getQuery << "coap://" << getIPAddrTBServer(clientResponse) << ":" << - getPortTBServer(clientResponse) << + getQuery << "coap://" << clientResponse->devAddr.addr << ":" << + clientResponse->devAddr.port << "/a/room" << queryInterface[TEST].text; std::cout << "Get Query: " << getQuery.str() << std::endl; @@ -336,7 +355,7 @@ int InitDiscovery() cbData.cb = discoveryReqCB; cbData.context = (void*)DEFAULT_CONTEXT_VALUE; cbData.cd = NULL; - ret = OCDoResource(NULL, OC_REST_GET, szQueryUri, 0, 0, OC_ALL, + ret = OCDoResource(NULL, OC_REST_DISCOVER, szQueryUri, 0, 0, OC_CONNTYPE, OC_LOW_QOS, &cbData, NULL, 0); if (ret != OC_STACK_OK) @@ -358,16 +377,15 @@ int main(int argc, char* argv[]) TEST = atoi(optarg); break; case 'c': - // TODO: re-enable IPv4/IPv6 command line selection when IPv6 is supported - // OC_CONNTYPE = OCConnectivityType(atoi(optarg)); - OC_CONNTYPE = OC_IPV4; + CONNECTIVITY = atoi(optarg); break; default: PrintUsage(); return -1; } } - if (TEST <= TEST_INVALID || TEST >= MAX_TESTS) + if ((TEST <= TEST_INVALID || TEST >= MAX_TESTS) || + (CONNECTIVITY < CT_ADAPTER_DEFAULT || CONNECTIVITY >= MAX_CT)) { PrintUsage(); return -1; @@ -380,6 +398,16 @@ int main(int argc, char* argv[]) return 0; } + if(CONNECTIVITY == CT_ADAPTER_DEFAULT || CONNECTIVITY == CT_IP) + { + OC_CONNTYPE = CT_ADAPTER_IP; + } + else + { + OC_LOG(INFO, TAG, "Default Connectivity type selected..."); + OC_CONNTYPE = CT_ADAPTER_IP; + } + InitDiscovery(); // Break from loop with Ctrl+C @@ -405,53 +433,8 @@ int main(int argc, char* argv[]) return 0; } -std::string getIPAddrTBServer(OCClientResponse * clientResponse) +std::string getQueryStrForGetPut() { - if (!clientResponse) - { - return ""; - } - if (!clientResponse->addr) - { - return ""; - } - uint8_t a, b, c, d = 0; - if (0 != OCDevAddrToIPv4Addr(clientResponse->addr, &a, &b, &c, &d)) - { - return ""; - } - - char ipaddr[16] = {'\0'}; - // ostringstream not working correctly here, hence snprintf - snprintf(ipaddr, sizeof(ipaddr), "%d.%d.%d.%d", a,b,c,d); - return std::string (ipaddr); -} - -std::string getPortTBServer(OCClientResponse * clientResponse) -{ - if (!clientResponse) - { - return ""; - } - if (!clientResponse->addr) - { - return ""; - } - uint16_t p = 0; - if (0 != OCDevAddrToPort(clientResponse->addr, &p)) - { - return ""; - } - std::ostringstream ss; - ss << p; - return ss.str(); -} - -std::string getQueryStrForGetPut(const char * responsePayload) -{ - - std::string jsonPayload(responsePayload); - return "/a/room"; }