X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fsrc%2FOCResource.cpp;h=204b0da17df411ba590cec39ab078469a9888b43;hb=17c68b2fd1e74586f85e552eeab4e32dc121f8a0;hp=1d35ea2231ba8082b65dd40af5747357020fd694;hpb=8c01dff2c5bc5496f7dc1632c498943ec6ecb015;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/src/OCResource.cpp b/resource/src/OCResource.cpp index 1d35ea2..204b0da 100644 --- a/resource/src/OCResource.cpp +++ b/resource/src/OCResource.cpp @@ -28,6 +28,11 @@ namespace OC { static const char COAP[] = "coap://"; static const char COAPS[] = "coaps://"; + +#ifdef TCP_ADAPTER +static const char COAP_TCP[] = "coap+tcp://"; +#endif + using OC::nil_guard; using OC::result_guard; using OC::checked_guard; @@ -64,7 +69,7 @@ OCResource::OCResource(std::weak_ptr clientWrapper, const std::vector& interfaces) : m_clientWrapper(clientWrapper), m_uri(uri), m_resourceId(serverId, m_uri), - m_devAddr{ OC_DEFAULT_ADAPTER }, + m_devAddr{ OC_DEFAULT_ADAPTER, OC_DEFAULT_FLAGS, 0, {0}, 0 }, m_isObservable(observable), m_isCollection(false), m_resourceTypes(resourceTypes), m_interfaces(interfaces), m_observeHandle(nullptr) @@ -81,6 +86,18 @@ OCResource::OCResource(std::weak_ptr clientWrapper, interfaces.empty(), m_clientWrapper.expired(), false, false); } + if (uri.length() == 1 && uri[0] == '/') + { + throw ResourceInitException(m_uri.empty(), resourceTypes.empty(), + interfaces.empty(), m_clientWrapper.expired(), false, false); + } + + if (uri[0] != '/') + { + throw ResourceInitException(m_uri.empty(), resourceTypes.empty(), + interfaces.empty(), m_clientWrapper.expired(), false, false); + } + // construct the devAddr from the pieces we have m_devAddr.adapter = static_cast(connectivityType >> CT_ADAPTER_SHIFT); m_devAddr.flags = static_cast(connectivityType & CT_MASK_FLAGS); @@ -110,13 +127,20 @@ void OCResource::setHost(const std::string& host) prefix_len = sizeof(COAPS) - 1; m_devAddr.flags = static_cast(m_devAddr.flags & OC_SECURE); } +#ifdef TCP_ADAPTER + else if (host.compare(0, sizeof(COAP_TCP) - 1, COAP_TCP) == 0) + { + prefix_len = sizeof(COAP_TCP) - 1; + m_devAddr.adapter = static_cast(m_devAddr.adapter & OC_ADAPTER_TCP); + } +#endif else { throw ResourceInitException(m_uri.empty(), m_resourceTypes.empty(), m_interfaces.empty(), m_clientWrapper.expired(), false, false); } - // removed coap:// or coaps:// + // removed coap:// or coaps:// or coap+tcp:// std::string host_token = host.substr(prefix_len); if(host_token[0] == '[') @@ -125,7 +149,7 @@ void OCResource::setHost(const std::string& host) size_t found = host_token.find(']'); - if(found == std::string::npos) + if(found == std::string::npos || found == 0) { throw ResourceInitException(m_uri.empty(), m_resourceTypes.empty(), m_interfaces.empty(), m_clientWrapper.expired(), false, false); @@ -141,7 +165,7 @@ void OCResource::setHost(const std::string& host) { size_t found = host_token.find(':'); - if(found == std::string::npos) + if(found == std::string::npos || found == 0) { throw ResourceInitException(m_uri.empty(), m_resourceTypes.empty(), m_interfaces.empty(), m_clientWrapper.expired(), false, false); @@ -376,6 +400,16 @@ OCStackResult OCResource::cancelObserve(QualityOfService QoS) return result; } +void OCResource::setHeaderOptions(const HeaderOptions& headerOptions) +{ + m_headerOptions = headerOptions; +} + +void OCResource::unsetHeaderOptions() +{ + m_headerOptions.clear(); +} + std::string OCResource::host() const { std::ostringstream ss; @@ -383,6 +417,12 @@ std::string OCResource::host() const { ss << COAPS; } +#ifdef TCP_ADAPTER + else if (m_devAddr.adapter & OC_ADAPTER_TCP) + { + ss << COAP_TCP; + } +#endif else { ss << COAP; @@ -418,6 +458,16 @@ bool OCResource::isObservable() const return m_isObservable; } +std::vector OCResource::getResourceTypes() const +{ + return m_resourceTypes; +} + +std::vector OCResource::getResourceInterfaces(void) const +{ + return m_interfaces; +} + OCResourceIdentifier OCResource::uniqueIdentifier() const { return m_resourceId;