The Pubnub C-core library. It's home is on https://github.com/pubnub/c_core, this is a copy

Dependents:   Pubnub_c_core_mbed2_pal Pubnub_c_core_mbed2_pal Pubnub_c_core_mbed2_pal2

Revision:
0:d13755cfb705
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pubnub_coreapi.h	Thu Nov 10 22:20:11 2016 +0000
@@ -0,0 +1,640 @@
+/* -*- c-file-style:"stroustrup"; indent-tabs-mode: nil -*- */
+#if !defined INC_PUBNUB_COREAPI
+#define INC_PUBNUB_COREAPI
+
+
+#include "pubnub_api_types.h"
+
+#include <stdbool.h>
+
+
+/** @file pubnub_coreapi.h 
+    This is the "Core" API of the Pubnub client library.
+    It has the functions that are present in all variants and
+    platforms and have the same interface in all of them.
+    For the most part, they have the same implementation in
+    all of them, too.
+*/
+
+
+/** Append this to a name of the channel to form the name of its
+    "presence" channel. A "presence" channel is a pseudo-channel on
+    which notifications of presence changes of a channel are announced
+    (sent by the Pubnub network). These notifications are JSON objects
+    with the following keys:
+
+    - "action": the event that happened, can be "leave", "join", "timeout",
+    "state-change"
+    - "timestamp": the timestamp of the moment the event happened
+    - "uuid": ID of the user that the event pertains to
+    - "occupancy": current number of present users in the channel
+
+    There is no special support for these (pseudo) channels in our
+    Pubnub client. If you wish to receive presence events, simply
+    append this suffix to the name of the channel and subscribe to
+    that "combined" name. For example, to receive presence events on
+    channel "my_channel", subscribe to "my_channel-pnpres".
+
+    Actually, you can subscribe to both a "regular" channel and a
+    "presence" channel at the same time, and you'll receive both the
+    presence events (on the "presence channel") and the published
+    messages (on the "regular" channel).
+ */
+#define PUBNUB_PRESENCE_SUFFIX "-pnpres"
+
+/** Initialize a given pubnub context @p p to the @p publish_key and @p
+    subscribe_key. You can customize other parameters of the context by
+    the configuration function calls below.  
+
+    @note The @p publish_key and @p subscribe key are expected to be
+    valid (ASCIIZ string) pointers throughout the use of context @p p,
+    that is, until either you call pubnub_done(), or the otherwise
+    stop using it (like when the whole software/ firmware stops
+    working). So, the contents of these keys are not copied to the
+    Pubnub context @p p.
+
+    @pre Call this after TCP initialization.
+    @pre @p subscribe_key can't be NULL
+    @param p The Context to initialize (use pubnub_alloc() to
+    obtain it)
+    @param publish_key The string of the key to use when publishing
+    messages (if you don't want to publish, you can pass NULL)
+    @param subscribe_key The string of the key to use when subscribing
+    to messages
+    @return Returns the @p p context
+*/
+pubnub_t* pubnub_init(pubnub_t *p, const char *publish_key, const char *subscribe_key);
+
+/** Set the UUID identification of PubNub client context @p p to @p
+    uuid. Pass NULL to unset.
+
+    @note The @p uuid is expected to be valid (ASCIIZ string) pointers
+    throughout the use of context @p p, that is, until either you call
+    pubnub_done() on @p p, or the otherwise stop using it (like when
+    the whole software/ firmware stops working). So, the contents of
+    the @p uuid string is not copied to the Pubnub context @p p.  */
+void pubnub_set_uuid(pubnub_t *p, const char *uuid);
+
+/** Get the UUID identification of PubNub client context @p p.
+    After pubnub_init(), it will return `NULL` until you change it
+    to non-`NULL` via pubnub_set_uuid().
+    */
+char const *pubnub_uuid_get(pubnub_t *p);
+
+/** Set the authentication information of PubNub client context @p
+    p. Pass NULL to unset.
+
+    @note The @p auth is expected to be valid (ASCIIZ string) pointers
+    throughout the use of context @p p, that is, until either you call
+    pubnub_done() on @p p, or the otherwise stop using it (like when
+    the whole software/ firmware stops working). So, the contents of
+    the auth string is not copied to the Pubnub context @p p.  */
+void pubnub_set_auth(pubnub_t *p, const char *auth);
+
+/** Returns the current authentication information for the
+    context @p p.
+    After pubnub_init(), it will return `NULL` until you change it
+    to non-`NULL` via pubnub_set_auth().
+*/
+char const *pubnub_auth_get(pubnub_t *p);
+
+/** Cancel an ongoing API transaction. The outcome of the transaction
+    in progress, if any, will be #PNR_CANCELLED. */
+void pubnub_cancel(pubnub_t *p);
+
+/** Publish the @p message (in JSON format) on @p p channel, using the
+    @p p context. This actually means "initiate a publish
+    transaction". 
+
+    You can't publish if a transaction is in progress in @p p context.
+
+    If transaction is not successful (@c PNR_PUBLISH_FAILED), you can 
+    get the string describing the reason for failure by calling
+    pubnub_last_publish_result().
+
+    Keep in mind that the time token from the publish operation
+    response is _not_ parsed by the library, just relayed to the
+    user. Only time-tokens from the subscribe operation are parsed
+    by the library.
+
+    Also, for all error codes known at the time of this writing, the
+    HTTP error will be set also, so the result of the Pubnub operation
+    will not be @c PNR_OK (but you will still be able to get the
+    result code and the description).
+
+    @param p The pubnub context. Can't be NULL
+    @param channel The string with the channel (or comma-delimited list
+    of channels) to publish to.
+    @param message The message to publish, expected to be in JSON format
+
+    @return #PNR_STARTED on success, an error otherwise
+ */
+enum pubnub_res pubnub_publish(pubnub_t *p, const char *channel, const char *message);
+
+/** Publish the @p message (in JSON format) on @p p channel, using the
+    @p p context, utilizing the v2 API. This actually means "initiate
+    a publish transaction".
+
+    Basically, this is an extension to the pubnub_publish() (v1),
+    with some additional options.
+
+    You can't publish if a transaction is in progress in @p p context.
+
+    @param p The pubnub context. Can't be NULL
+    @param channel The string with the channel (or comma-delimited list
+    of channels) to publish to.
+    @param message The message to publish, expected to be in JSON format
+    @param store_in_history If `false`, message will not be stored in
+    history of the channel
+    @param eat_after_reading If `true`, message will not be stored for
+    delayed or repeated retrieval or display
+
+    @return #PNR_STARTED on success, an error otherwise
+ */
+enum pubnub_res pubnub_publishv2(pubnub_t *p, const char *channel, const char *message, bool store_in_history, bool eat_after_reading);
+
+/** Returns a pointer to an arrived message or other element of the
+    response to an operation/transaction. Message(s) arrive on finish
+    of a subscribe operation or history operation, while for some
+    other operations this will give access to the whole response,
+    or the next element of the response. That is documented in
+    the function that starts the operation.
+
+    Subsequent call to this function will return the next message (if
+    any). All messages are from the channel(s) the last operation was
+    for.
+
+    @note Context doesn't keep track of the channel(s) you subscribed
+    to. This is a memory saving design decision, as most users won't
+    change the channel(s) they subscribe too.
+
+    @param p The Pubnub context. Can't be NULL.
+
+    @return Pointer to the message, NULL on error
+    @see pubnub_subscribe
+ */
+char const* pubnub_get(pubnub_t *p);
+
+/** Returns a pointer to an fetched subscribe operation/transaction's
+    next channel.  Each transaction may hold a list of channels, and
+    this functions provides a way to read them.  Subsequent call to
+    this function will return the next channel (if any).
+
+    @note You don't have to read all (or any) of the channels before
+    you start a new transaction.
+
+    @param pb The Pubnub context. Can't be NULL.
+
+    @return Pointer to the channel, NULL on error
+    @see pubnub_subscribe
+    @see pubnub_get
+ */
+char const *pubnub_get_channel(pubnub_t *pb);
+
+/** Subscribe to @p channel and/or @p channel_group. This actually
+    means "initiate a subscribe operation/transaction". The outcome
+    will be retrieved by the "notification" API, which is different
+    for different platforms. There are two APIs that are widely
+    available - "sync" and "callback".
+
+    Messages published on @p channel and/or @p channel_group since the
+    last subscribe transaction will be fetched, unless this is the
+    first subscribe on this context after initialization or a serious
+    error. In that "first" case, this will just retrieve the current
+    time token, and that event is called "connect" in many pubnub
+    SDKs, but in C-core we don't treat it any different. For that
+    "first" case, you will receive a notification that subscribe has
+    finished OK, but there will be no messages in the reply.
+
+    The @p channel and @p channel_group strings may contain multiple
+    comma-separated channel (channel group) names, so only one call is
+    needed to fetch messages from multiple channels (channel groups).
+
+    If @p channel is NULL, then @p channel_group cannot be NULL and
+    you will subscribe only to the channel group(s). It goes both
+    ways: if @p channel_group is NULL, then @p channel cannot be NULL
+    and you will subscribe only to the channel(s).
+
+    You can't subscribe if a transaction is in progress on the context.
+
+    Also, you can't subscribe if there are unread messages in the
+    context (you read messages with pubnub_get()).
+
+    @param p The pubnub context. Can't be NULL
+    @param channel The string with the channel name (or comma-delimited list
+    of channel names) to subscribe to.
+    @param channel_group The string with the channel group name (or
+    comma-delimited list of channel group names) to subscribe to.
+
+    @return #PNR_STARTED on success, an error otherwise
+    
+    @see pubnub_get
+ */
+enum pubnub_res pubnub_subscribe(pubnub_t *p, const char *channel, const char *channel_group);
+
+/** Leave the @p channel. This actually means "initiate a leave
+    transaction".  You should leave channel(s) when you want to
+    subscribe to another in the same context to avoid loosing
+    messages. Also, it is useful for tracking presence.
+
+    You can't leave if a transaction is in progress on the context.
+
+    @param p The Pubnub context. Can't be NULL.  
+    @param channel The string with the channel name (or
+    comma-delimited list of channel names) to leave from.
+    @param channel_group The string with the channel group name (or
+    comma-delimited list of channel group names) to leave from.
+
+    @return #PNR_STARTED on success, an error otherwise
+*/
+enum pubnub_res pubnub_leave(pubnub_t *p, const char *channel, const char *channel_group);
+
+/** Get the current Pubnub time token . This actually means "initiate
+    a time transaction". Since time token is in the response to most
+    Pubnub REST API calls, this is reserved mostly when you want to
+    get a high-quality seed for a random number generator, or some
+    such thing.
+
+    If transaction is successful, the gotten time will be the only
+    message you can get with pubnub_get(). It will be a (large) JSON
+    integer.
+    
+    You can't get time if a transaction is in progress on the context.
+
+    @param p The Pubnub context. Can't be NULL.  
+
+    @return #PNR_STARTED on success, an error otherwise
+*/
+enum pubnub_res pubnub_time(pubnub_t *p);
+
+/** Get the message history for the @p channel. This actually
+    means "initiate a history transaction/operation".
+
+    If transaction is successful, the gotten messages will be
+    available via the pubnub_get().  Using pubnub_get() will give
+    you exactly three messages (or, rather, elements).  The first will
+    be a JSON array of gotten messages, and the second and third will be
+    the timestamps of the first and the last message from that array.
+
+    Also, if you select to @c include_token, then the JSON array
+    you get will not be a simple array of gotten messages, but
+    rather an array of JSON objects, having keys `message` with
+    value the actual message, and `timetoken` with the time token
+    of that particular message.
+    
+    You can't get history if a transaction is in progress on the context.
+
+    @param p The Pubnub context. Can't be NULL. 
+    @param channel The string with the channel name to get message 
+    history for. This _can't_ be a comma separated list of channels.
+    @param count Maximum number of messages to get. If there are less
+    than this available on the @c channel, you'll get less, but you
+    can't get more.
+    @param include_token If true, include the time token for every
+    gotten message
+
+    @return #PNR_STARTED on success, an error otherwise
+*/
+enum pubnub_res pubnub_history(pubnub_t *p, const char *channel, unsigned count, bool include_token);
+
+/** Inform Pubnub that we're still working on @p channel and/or @p
+    channel_group.  This actually means "initiate a heartbeat
+    transaction". It can be thought of as an update against the
+    "presence database".
+
+    If transaction is successful, the response will be a available
+    via pubnub_get() as one message, a JSON object. Following keys
+    are always present:
+    - "status": the HTTP status of the operation (200 OK, 40x error, etc.)
+    - "message": the string/message describing the status ("OK"...)
+    - "service": should be "Presence"
+
+    If @p channel is NULL, then @p channel_group cannot be NULL and
+    you will subscribe only to the channel group(s). It goes both ways:
+    if @p channel_group is NULL, then @p channel cannot be NULL and
+    you will subscribe only to the channel(s).
+    
+    You can't get list of currently present users if a transaction is
+    in progress on the context.
+
+    @param p The Pubnub context. Can't be NULL. 
+    @param channel The string with the channel name (or
+    comma-delimited list of channel names) to get presence info for.
+    @param channel_group The string with the channel name (or
+    comma-delimited list of channel group names) to get presence info for.
+
+    @return #PNR_STARTED on success, an error otherwise
+*/
+enum pubnub_res pubnub_heartbeat(pubnub_t *p, const char* channel, const char* channel_group);
+
+/** Get the currently present users on a @p channel and/or @p
+    channel_group. This actually means "initiate a here_now
+    transaction". It can be thought of as a query against the
+    "presence database".
+
+    If transaction is successful, the response will be a available
+    via pubnub_get() as one message, a JSON object. Following keys
+    are always present:
+    - "status": the HTTP status of the operation (200 OK, 40x error, etc.)
+    - "message": the string/message describing the status ("OK"...)
+    - "service": should be "Presence"
+
+    If doing a query on a single channel, following keys are present:
+    - "uuids": an array of UUIDs of currently present users
+    - "occupancy": the number of currently present users in the channel
+
+    If doing a query on more channels, a key "payload" is present,
+    which is a JSON object whose keys are:
+
+    - "channels": a JSON object with keys being the names of the
+    channels and their values JSON objects with keys "uuids" and
+    "occupancy" with the meaning the same as for query on a single
+    channel
+    - "total_channels": the number of channels for which the
+    presence is given (in "payload")
+    - "total_occupancy": total number of users present in all channels
+
+    If @p channel is NULL, then @p channel_group cannot be NULL and
+    you will subscribe only to the channel group(s). It goes both ways:
+    if @p channel_group is NULL, then @p channel cannot be NULL and
+    you will subscribe only to the channel(s).
+    
+    You can't get list of currently present users if a transaction is
+    in progress on the context.
+
+    @param p The Pubnub context. Can't be NULL. 
+    @param channel The string with the channel name (or
+    comma-delimited list of channel names) to get presence info for.
+    @param channel_group The string with the channel name (or
+    comma-delimited list of channel group names) to get presence info for.
+
+    @return #PNR_STARTED on success, an error otherwise
+*/
+enum pubnub_res pubnub_here_now(pubnub_t *p, const char *channel, const char *channel_group);
+
+
+/** Get the currently present users on all channel. This actually
+    means "initiate a global here_now transaction". It can be thought
+    of as a query against the "presence database".
+
+    If transaction is successful, the response will be the same
+    as for "multi-channel" response for pubnub_here_now(), if
+    we queried against all currently available channels.
+    
+    You can't get list of currently present users if a transaction is
+    in progress on the context.
+
+    @param p The Pubnub context. Can't be NULL. 
+
+    @return #PNR_STARTED on success, an error otherwise
+*/
+enum pubnub_res pubnub_global_here_now(pubnub_t *p);
+
+/** Get the currently present users on a @p channel and/or @p
+    channel_group. This actually means "initiate a here_now
+    transaction". It can be thought of as a query against the
+    "presence database".
+
+    If transaction is successful, the response will be a available
+    via pubnub_get() as one message, a JSON object with keys:
+
+    - "status": the HTTP status of the operation (200 OK, 40x error, etc.)
+    - "message": the string/message describing the status ("OK"...)
+    - "service": should be "Presence"
+    - "payload": JSON object with a key "channels" which is an
+    array of channels this user is present in
+
+    You can't get channel presence for the user if a transaction is
+    in progress on the context.
+
+    @param p The Pubnub context. Can't be NULL. 
+    @param uuid The UUID of the user to get the channel presence.
+    If NULL, the current UUID of the @c p context will be used.
+
+    @return #PNR_STARTED on success, an error otherwise
+*/
+enum pubnub_res pubnub_where_now(pubnub_t *p, const char *uuid);
+
+/** Sets some state for the @p channel and/or @channel_group for a
+    user, identified by @p uuid. This actually means "initiate a set
+    state transaction". It can be thought of as an update against the
+    "presence database".
+
+    "State" has to be a JSON object (IOW, several "key-value" pairs).
+
+    If transaction is successful, the response will be a available
+    via pubnub_get() as one message, a JSON object with following keys:
+    - "status": the HTTP status of the operation (200 OK, 40x error, etc.)
+    - "message": the string/message describing the status ("OK"...)
+    - "service": should be "Presence"
+    - "payload" the state
+
+    This will set the same state to all channels identified by
+    @p channel and @p channel_group.
+
+    If @p channel is NULL, then @p channel_group cannot be NULL and
+    you will set state only to the channel group(s). It goes both
+    ways: if @p channel_group is NULL, then @p channel cannot be NULL
+    and you will set state only to the channel(s).
+
+    You can't set state of channels if a transaction is in progress on
+    the context.
+
+    @param p The Pubnub context. Can't be NULL. 
+    @param channel The string with the channel name (or
+    comma-delimited list of channel names) to set state for.
+    @param channel_group The string with the channel name (or
+    comma-delimited list of channel group names) to set state for.
+    @param uuid The UUID of the user for which to set state for.
+    If NULL, the current UUID of the @c p context will be used.
+    @param state Has to be a JSON object
+
+    @return #PNR_STARTED on success, an error otherwise
+*/
+enum pubnub_res pubnub_set_state(pubnub_t *p, char const *channel, char const *channel_group, const char *uuid, char const *state);
+
+
+/** Gets some state for the @p channel and/or @p channel_group for a
+    user, identified by @p uuid. This actually means "initiate a get
+    state transaction". It can be thought of as a query against the
+    "presence database".
+
+    If transaction is successful, the response will be a available
+    via pubnub_get() as one message, a JSON object with following keys:
+    - "status": the HTTP status of the operation (200 OK, 40x error, etc.)
+    - "message": the string/message describing the status ("OK"...)
+    - "service": should be "Presence"
+    - "payload": if querying against one channel the gotten state 
+    (a JSON object), otherwise a JSON object with the key "channels"
+    whose value is a JSON object with keys the name of the channels
+    and their respective values JSON objects of the gotten state
+
+    If @p channel is NULL, then @p channel_group cannot be NULL and
+    you will get state only for the channel group(s). It goes both
+    ways: if @p channel_group is NULL, then @p channel cannot be NULL
+    and you will get state only for the channel(s).
+
+    You can't get state of channel(s) if a transaction is in progress
+    on the context.
+
+    @param p The Pubnub context. Can't be NULL. 
+    @param channel The string with the channel name (or
+    comma-delimited list of channel names) to get state from.
+    @param channel_group The string with the channel name (or
+    comma-delimited list of channel group names) to get state from.
+    @param uuid The UUID of the user for which to get state for.
+    If NULL, the current UUID of the @p p context will be used.
+
+    @return #PNR_STARTED on success, an error otherwise
+*/
+enum pubnub_res pubnub_state_get(pubnub_t *p, char const *channel, char const *channel_group, const char *uuid);
+
+/** Removes a @p channel_group and all its channels. This actually
+    means "initiate a remove_channel_group transaction". It can be
+    thought of as an update against the "channel group database".
+
+    If transaction is successful, the response will be a available via
+    pubnub_get_channel() as one "channel", a JSON object with keys:
+
+    - "service": should be "channel-registry"
+    - "status": the HTTP status of the operation (200 OK, 40x error, etc.)
+    - "error": true on error, false on success
+    - "message": the string/message describing the status ("OK"...)
+
+    You can't remove a channel group if a transaction is in progress
+    on the context.
+
+    @param p The Pubnub context. Can't be NULL. 
+    @param channel_group The channel group to remove
+
+    @return #PNR_STARTED on success, an error otherwise
+*/
+enum pubnub_res pubnub_remove_channel_group(pubnub_t *p, char const *channel_group);
+
+/** Removes a @p channel from the @p channel_group . This actually
+    means "initiate a remove_channel_from_channel_group
+    transaction". It can be thought of as an update against the
+    "channel group database".
+
+    You can't remove the last channel from a channel group. To do
+    that, remove the channel group itself.
+
+    If transaction is successful, the response will be a available via
+    pubnub_get_channel() as one "channel", a JSON object with keys:
+
+    - "service": should be "channel-registry"
+    - "status": the HTTP status of the operation (200 OK, 40x error, etc.)
+    - "error": true on error, false on success
+    - "message": the string/message describing the status ("OK"...)
+
+    You can't remove a channel from a channel group if a transaction
+    is in progress on the context.
+
+    @param p The Pubnub context. Can't be NULL. 
+    @param channel_group The channel to remove
+    @param channel_group The channel group to remove from
+
+    @return #PNR_STARTED on success, an error otherwise
+*/
+enum pubnub_res pubnub_remove_channel_from_group(pubnub_t *p, char const *channel, char const *channel_group);
+
+/** Adds a @p channel to the @p channel_group . This actually means
+    "initiate a add_channel_to_channel_group transaction". It can be
+    thought of as an update against the "channel group database".
+
+    If the channel group doesn't exist, this implicitly adds (creates)
+    it.
+
+    If transaction is successful, the response will be a available
+    via pubnub_get_channel() as one "channel", a JSON object with keys:
+
+    - "service": should be "channel-registry"
+    - "status": the HTTP status of the operation (200 OK, 40x error, etc.)
+    - "error": true on error, false on success
+    - "message": the string/message describing the status ("OK"...)
+
+    You can't add a channel to a channel group if a transaction
+    is in progress on the context.
+
+    @param p The Pubnub context. Can't be NULL. 
+    @param channel The channel to add
+    @param channel_group The channel group to add to
+
+    @return #PNR_STARTED on success, an error otherwise
+*/
+enum pubnub_res pubnub_add_channel_to_group(pubnub_t *p, char const *channel, char const *channel_group);
+
+/** Lists all channels of a @p channel_group. This actually
+    means "initiate a list_channel_group transaction". It can be
+    thought of as a query against the "channel group database".
+
+    If transaction is successful, the response will be a available via
+    pubnub_get_channel() as one "channel", a JSON object with keys:
+
+    - "service": should be "channel-registry"
+    - "status": the HTTP status of the operation (200 OK, 40x error, etc.)
+    - "error": true on error, false on success
+    - "payload": JSON object with keys "group" with value the string
+    of the channel group name and "channels" with value a JSON array
+    of strings with names of the channels that belong to the group
+
+    You can't remove a channel group if a transaction is in progress
+    on the context.
+
+    @param p The Pubnub context. Can't be NULL. 
+    @param channel_group The channel group to list
+
+    @return #PNR_STARTED on success, an error otherwise
+*/
+enum pubnub_res pubnub_list_channel_group(pubnub_t *p, char const *channel_group);
+
+/** Returns the result of the last transaction in the @p p context.
+    This _may_ block if using blocking I/O. It will _not_ block if using
+    non-blocking I/O.  
+
+    @see pubnub_set_blocking_io
+    @see pubnub_set_non_blocking_io
+*/
+enum pubnub_res pubnub_last_result(pubnub_t *p);
+
+/** Returns the HTTP reply code of the last transaction in the @p p
+ * context. */
+int pubnub_last_http_code(pubnub_t *p);
+
+/** Returns the string of the result of the last `publish` transaction,
+    as returned from Pubnub. If the last transaction is not a publish,
+    or there is some other error, it returns NULL. If the Publish
+    was successfull, it will return "Sent", otherwise a description
+    of the error.
+ */
+char const *pubnub_last_publish_result(pubnub_t *p);
+
+/** Returns the string of the last received time token on the
+    @c p context. After pubnub_init() this should be "0".
+    @param p Pubnub context to get the last received time token from
+    @return A read only string of the last received time token
+ */
+char const *pubnub_last_time_token(pubnub_t *p);
+
+/** Gets the origin to be used for the context @p p.
+    If setting of the origin is not enabled, this will return
+    the default origin.
+    @param p Pubnub context to get the origin from
+    @return A read only string of origin used for context @p p
+ */
+char const *pubnub_get_origin(pubnub_t *p);
+
+/** Sets the origin to be used for the context @p p.  If setting of
+    the origin is not enabled, this will fail.  It may also fail if it
+    detects an invalid origin, but NULL is not an invalid origin - it
+    resets the origin to default.
+
+    @param p Pubnub context to set the origin for
+    @param origin The origin to use for context @p p. If NULL,
+    the default origin will be set
+    @return 0: success, -1: fail
+*/
+int pubnub_origin_set(pubnub_t *p, char const *origin);
+
+
+#endif /* defined INC_PUBNUB_COREAPI */