Skip to content

stuffrabbit/iCoAP

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 

iCoAP

This project is an Objective-C implementation of the "Constrained Application Protocol" (CoAP) for Clients only. The current version has besides the standard CoAP features the following additions:

  • Observe
  • Block transfer in responses (Block 2)

Do you want more features or a server implementation? Checkout my new project SwiftCoAP - a client and server implementation of CoAP in Apple's beautiful new programming language Swift, with more functionality than iCoAP (Block1, Caching, etc.).

Getting Started

  • Copy all files included in the iCoAP-Library_Files folder to your X-Code project.
  • Import the ICoAPExchange.h to your Objective-C class (e.g. a standard ViewController).
  • Create an ICoAPMessage object e.g. like:
ICoAPMessage *cO = [[ICoAPMessage alloc] initAsRequestConfirmable:YES 
                                         requestMethod:GET 
                                         sendToken:YES 
                                         payload:@""];

Alternatively you can use the standard init Method and set the required properties manually.

  • Modify your Message, e.g. by adding Options like
[cO addOption:URI_PATH withValue:@".well-known"];
[cO addOption:URI_PATH withValue:@"core"];

Options are saved in an NSMutable Dictionary, where each dictionary "key" represents an option number and the matching dictionary "values" consist of NSMutableArrays of the corresponding option values.

  • Initialize the ICoAPExchange object and send your message to the desired destination. You can use the following method which performs a sending on initialization:
ICoAPExchange *exchange = 
          [[ICoAPExchange alloc] initAndSendRequestWithCoAPMessage:cO 
                                     toHost:@"4.coap.me" 
                                     port:5683 
                                     delegate:self];

Alternatively you can use the standard init method, alter properties (optional, but don't forget to set the delegate) and send manually like:

[exchange sendRequestWithCoAPMessage:cO toHost:@"4.coap.me" port:5683];
  • Implement the delegate methods from the provided ICoAPExchangeDelegate protocol.

Now you should be able to communicate.

HTTP-Proxying:

It is possible to send a CoAP-Message via a HTTP-Proxy. You just have to set the following Properties after creating a CoAP-Message

CoAPMessage *message = 
    [[ICoAPMessage alloc] initAsRequestConfirmable:YES 
                                      requestMethod:GET
                                      sendToken:YES 
                                      payload:@""];
[message setUsesHttpProxying:YES];
[message setHttpProxyHost:@"localhost"];
[message setHttpProxyPort:5683];

The Options of the CoAP-Message are sent in the HTTP-Header. It is required that the Proxy returns the CoAP-Type in the Header of HTTP-Response as well. The respective Header-Field is COAP_TYPE. The Request-URI has the following Format: http://proxyHost:proxyPort/coapHost:coapPort An Example: Sending your message to the CoAP-Server coap.me with the Port 5683 via a HTTP-Proxy located at localhost:9292, lets the iCoAP-Library compose the following Request-URI: http://localhost:9292/coap.me:5683

Details and Examples:

For detailed information checkout the iCoAP_Example App, which provides a simple example of how to use the iCoAP Library. Additionally, make sure to read the comments in both the ICoAPExchange.h and the ICoAPMessage.h files. The available Category NSString+hex.h might also be of use by encoding values for the CoAP communication.

Used Libraries:

This version uses the public domain licensed CocoaAsyncSocket library for UDP-socket networking. Click here for more information.

About

Objective-C Client Implementation of CoAP - RFC 7252

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published