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
pubnub_coreapi.cpp@2:d85e42c1125d, 2016-11-22 (annotated)
- Committer:
- sveljko
- Date:
- Tue Nov 22 22:21:39 2016 +0000
- Revision:
- 2:d85e42c1125d
- Parent:
- 0:d13755cfb705
Added `pubnub_helper` module
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sveljko | 0:d13755cfb705 | 1 | /* -*- c-file-style:"stroustrup"; indent-tabs-mode: nil -*- */ |
sveljko | 0:d13755cfb705 | 2 | #include "pubnub_coreapi.h" |
sveljko | 0:d13755cfb705 | 3 | |
sveljko | 0:d13755cfb705 | 4 | #include "pubnub_ccore.h" |
sveljko | 0:d13755cfb705 | 5 | #include "pubnub_netcore.h" |
sveljko | 0:d13755cfb705 | 6 | #include "pubnub_internal.h" |
sveljko | 0:d13755cfb705 | 7 | #include "pubnub_assert.h" |
sveljko | 0:d13755cfb705 | 8 | #include "pubnub_timers.h" |
sveljko | 0:d13755cfb705 | 9 | |
sveljko | 0:d13755cfb705 | 10 | #include "pbpal.h" |
sveljko | 0:d13755cfb705 | 11 | |
sveljko | 0:d13755cfb705 | 12 | #include <stdlib.h> |
sveljko | 0:d13755cfb705 | 13 | #include <ctype.h> |
sveljko | 0:d13755cfb705 | 14 | |
sveljko | 0:d13755cfb705 | 15 | |
sveljko | 0:d13755cfb705 | 16 | pubnub_t* pubnub_init(pubnub_t *p, const char *publish_key, const char *subscribe_key) |
sveljko | 0:d13755cfb705 | 17 | { |
sveljko | 0:d13755cfb705 | 18 | PUBNUB_ASSERT(pb_valid_ctx_ptr(p)); |
sveljko | 0:d13755cfb705 | 19 | |
sveljko | 0:d13755cfb705 | 20 | pubnub_mutex_init(p->monitor); |
sveljko | 0:d13755cfb705 | 21 | pubnub_mutex_lock(p->monitor); |
sveljko | 0:d13755cfb705 | 22 | pbcc_init(&p->core, publish_key, subscribe_key); |
sveljko | 0:d13755cfb705 | 23 | if (PUBNUB_TIMERS_API) { |
sveljko | 0:d13755cfb705 | 24 | p->transaction_timeout_ms = PUBNUB_DEFAULT_TRANSACTION_TIMER; |
sveljko | 0:d13755cfb705 | 25 | #if defined(PUBNUB_CALLBACK_API) |
sveljko | 0:d13755cfb705 | 26 | p->previous = p->next = NULL; |
sveljko | 0:d13755cfb705 | 27 | #endif |
sveljko | 0:d13755cfb705 | 28 | } |
sveljko | 0:d13755cfb705 | 29 | #if defined(PUBNUB_CALLBACK_API) |
sveljko | 0:d13755cfb705 | 30 | p->cb = NULL; |
sveljko | 0:d13755cfb705 | 31 | p->user_data = NULL; |
sveljko | 0:d13755cfb705 | 32 | #endif |
sveljko | 0:d13755cfb705 | 33 | if (PUBNUB_ORIGIN_SETTABLE) { |
sveljko | 0:d13755cfb705 | 34 | p->origin = PUBNUB_ORIGIN; |
sveljko | 0:d13755cfb705 | 35 | } |
sveljko | 0:d13755cfb705 | 36 | |
sveljko | 0:d13755cfb705 | 37 | p->state = PBS_IDLE; |
sveljko | 0:d13755cfb705 | 38 | p->trans = PBTT_NONE; |
sveljko | 0:d13755cfb705 | 39 | pbpal_init(p); |
sveljko | 0:d13755cfb705 | 40 | pubnub_mutex_unlock(p->monitor); |
sveljko | 0:d13755cfb705 | 41 | |
sveljko | 0:d13755cfb705 | 42 | #if PUBNUB_PROXY_API |
sveljko | 0:d13755cfb705 | 43 | p->proxy_type = pbproxyNONE; |
sveljko | 0:d13755cfb705 | 44 | p->proxy_hostname[0] = '\0'; |
sveljko | 0:d13755cfb705 | 45 | p->proxy_tunnel_established = false; |
sveljko | 0:d13755cfb705 | 46 | p->proxy_port = 80; |
sveljko | 0:d13755cfb705 | 47 | #endif |
sveljko | 0:d13755cfb705 | 48 | |
sveljko | 0:d13755cfb705 | 49 | return p; |
sveljko | 0:d13755cfb705 | 50 | } |
sveljko | 0:d13755cfb705 | 51 | |
sveljko | 0:d13755cfb705 | 52 | |
sveljko | 0:d13755cfb705 | 53 | enum pubnub_res pubnub_publish(pubnub_t *pb, const char *channel, const char *message) |
sveljko | 0:d13755cfb705 | 54 | { |
sveljko | 0:d13755cfb705 | 55 | enum pubnub_res rslt; |
sveljko | 0:d13755cfb705 | 56 | |
sveljko | 0:d13755cfb705 | 57 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 58 | |
sveljko | 0:d13755cfb705 | 59 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 60 | if (pb->state != PBS_IDLE) { |
sveljko | 0:d13755cfb705 | 61 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 62 | return PNR_IN_PROGRESS; |
sveljko | 0:d13755cfb705 | 63 | } |
sveljko | 0:d13755cfb705 | 64 | |
sveljko | 0:d13755cfb705 | 65 | rslt = pbcc_publish_prep(&pb->core, channel, message, true, false); |
sveljko | 0:d13755cfb705 | 66 | if (PNR_STARTED == rslt) { |
sveljko | 0:d13755cfb705 | 67 | pb->trans = PBTT_PUBLISH; |
sveljko | 0:d13755cfb705 | 68 | pb->core.last_result = PNR_STARTED; |
sveljko | 0:d13755cfb705 | 69 | pbnc_fsm(pb); |
sveljko | 0:d13755cfb705 | 70 | rslt = pb->core.last_result; |
sveljko | 0:d13755cfb705 | 71 | } |
sveljko | 0:d13755cfb705 | 72 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 73 | |
sveljko | 0:d13755cfb705 | 74 | return rslt; |
sveljko | 0:d13755cfb705 | 75 | } |
sveljko | 0:d13755cfb705 | 76 | |
sveljko | 0:d13755cfb705 | 77 | |
sveljko | 0:d13755cfb705 | 78 | enum pubnub_res pubnub_publishv2(pubnub_t *pb, const char *channel, const char *message, bool store_in_history, bool eat_after_reading) |
sveljko | 0:d13755cfb705 | 79 | { |
sveljko | 0:d13755cfb705 | 80 | enum pubnub_res rslt; |
sveljko | 0:d13755cfb705 | 81 | |
sveljko | 0:d13755cfb705 | 82 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 83 | |
sveljko | 0:d13755cfb705 | 84 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 85 | if (pb->state != PBS_IDLE) { |
sveljko | 0:d13755cfb705 | 86 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 87 | return PNR_IN_PROGRESS; |
sveljko | 0:d13755cfb705 | 88 | } |
sveljko | 0:d13755cfb705 | 89 | |
sveljko | 0:d13755cfb705 | 90 | rslt = pbcc_publish_prep(&pb->core, channel, message, store_in_history, eat_after_reading); |
sveljko | 0:d13755cfb705 | 91 | if (PNR_STARTED == rslt) { |
sveljko | 0:d13755cfb705 | 92 | pb->trans = PBTT_PUBLISH; |
sveljko | 0:d13755cfb705 | 93 | pb->core.last_result = PNR_STARTED; |
sveljko | 0:d13755cfb705 | 94 | pbnc_fsm(pb); |
sveljko | 0:d13755cfb705 | 95 | rslt = pb->core.last_result; |
sveljko | 0:d13755cfb705 | 96 | } |
sveljko | 0:d13755cfb705 | 97 | |
sveljko | 0:d13755cfb705 | 98 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 99 | return rslt; |
sveljko | 0:d13755cfb705 | 100 | } |
sveljko | 0:d13755cfb705 | 101 | |
sveljko | 0:d13755cfb705 | 102 | |
sveljko | 0:d13755cfb705 | 103 | char const *pubnub_get(pubnub_t *pb) |
sveljko | 0:d13755cfb705 | 104 | { |
sveljko | 0:d13755cfb705 | 105 | char const *result; |
sveljko | 0:d13755cfb705 | 106 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 107 | |
sveljko | 0:d13755cfb705 | 108 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 109 | result = pbcc_get_msg(&pb->core); |
sveljko | 0:d13755cfb705 | 110 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 111 | |
sveljko | 0:d13755cfb705 | 112 | return result; |
sveljko | 0:d13755cfb705 | 113 | } |
sveljko | 0:d13755cfb705 | 114 | |
sveljko | 0:d13755cfb705 | 115 | |
sveljko | 0:d13755cfb705 | 116 | char const *pubnub_get_channel(pubnub_t *pb) |
sveljko | 0:d13755cfb705 | 117 | { |
sveljko | 0:d13755cfb705 | 118 | char const *result; |
sveljko | 0:d13755cfb705 | 119 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 120 | |
sveljko | 0:d13755cfb705 | 121 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 122 | result = pbcc_get_channel(&pb->core); |
sveljko | 0:d13755cfb705 | 123 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 124 | |
sveljko | 0:d13755cfb705 | 125 | return result; |
sveljko | 0:d13755cfb705 | 126 | } |
sveljko | 0:d13755cfb705 | 127 | |
sveljko | 0:d13755cfb705 | 128 | |
sveljko | 0:d13755cfb705 | 129 | enum pubnub_res pubnub_subscribe(pubnub_t *p, const char *channel, const char *channel_group) |
sveljko | 0:d13755cfb705 | 130 | { |
sveljko | 0:d13755cfb705 | 131 | enum pubnub_res rslt; |
sveljko | 0:d13755cfb705 | 132 | |
sveljko | 0:d13755cfb705 | 133 | PUBNUB_ASSERT(pb_valid_ctx_ptr(p)); |
sveljko | 0:d13755cfb705 | 134 | |
sveljko | 0:d13755cfb705 | 135 | pubnub_mutex_lock(p->monitor); |
sveljko | 0:d13755cfb705 | 136 | if (p->state != PBS_IDLE) { |
sveljko | 0:d13755cfb705 | 137 | pubnub_mutex_unlock(p->monitor); |
sveljko | 0:d13755cfb705 | 138 | return PNR_IN_PROGRESS; |
sveljko | 0:d13755cfb705 | 139 | } |
sveljko | 0:d13755cfb705 | 140 | |
sveljko | 0:d13755cfb705 | 141 | rslt = pbcc_subscribe_prep(&p->core, channel, channel_group, NULL); |
sveljko | 0:d13755cfb705 | 142 | if (PNR_STARTED == rslt) { |
sveljko | 0:d13755cfb705 | 143 | p->trans = PBTT_SUBSCRIBE; |
sveljko | 0:d13755cfb705 | 144 | p->core.last_result = PNR_STARTED; |
sveljko | 0:d13755cfb705 | 145 | pbnc_fsm(p); |
sveljko | 0:d13755cfb705 | 146 | rslt = p->core.last_result; |
sveljko | 0:d13755cfb705 | 147 | } |
sveljko | 0:d13755cfb705 | 148 | |
sveljko | 0:d13755cfb705 | 149 | pubnub_mutex_unlock(p->monitor); |
sveljko | 0:d13755cfb705 | 150 | return rslt; |
sveljko | 0:d13755cfb705 | 151 | } |
sveljko | 0:d13755cfb705 | 152 | |
sveljko | 0:d13755cfb705 | 153 | |
sveljko | 0:d13755cfb705 | 154 | enum pubnub_res pubnub_leave(pubnub_t *p, const char *channel, const char *channel_group) |
sveljko | 0:d13755cfb705 | 155 | { |
sveljko | 0:d13755cfb705 | 156 | enum pubnub_res rslt; |
sveljko | 0:d13755cfb705 | 157 | |
sveljko | 0:d13755cfb705 | 158 | PUBNUB_ASSERT(pb_valid_ctx_ptr(p)); |
sveljko | 0:d13755cfb705 | 159 | |
sveljko | 0:d13755cfb705 | 160 | pubnub_mutex_lock(p->monitor); |
sveljko | 0:d13755cfb705 | 161 | if (p->state != PBS_IDLE) { |
sveljko | 0:d13755cfb705 | 162 | pubnub_mutex_unlock(p->monitor); |
sveljko | 0:d13755cfb705 | 163 | return PNR_IN_PROGRESS; |
sveljko | 0:d13755cfb705 | 164 | } |
sveljko | 0:d13755cfb705 | 165 | |
sveljko | 0:d13755cfb705 | 166 | rslt = pbcc_leave_prep(&p->core, channel, channel_group); |
sveljko | 0:d13755cfb705 | 167 | if (PNR_STARTED == rslt) { |
sveljko | 0:d13755cfb705 | 168 | p->trans = PBTT_LEAVE; |
sveljko | 0:d13755cfb705 | 169 | p->core.last_result = PNR_STARTED; |
sveljko | 0:d13755cfb705 | 170 | pbnc_fsm(p); |
sveljko | 0:d13755cfb705 | 171 | rslt = p->core.last_result; |
sveljko | 0:d13755cfb705 | 172 | } |
sveljko | 0:d13755cfb705 | 173 | |
sveljko | 0:d13755cfb705 | 174 | pubnub_mutex_unlock(p->monitor); |
sveljko | 0:d13755cfb705 | 175 | return rslt; |
sveljko | 0:d13755cfb705 | 176 | } |
sveljko | 0:d13755cfb705 | 177 | |
sveljko | 0:d13755cfb705 | 178 | |
sveljko | 0:d13755cfb705 | 179 | enum pubnub_res pubnub_time(pubnub_t *p) |
sveljko | 0:d13755cfb705 | 180 | { |
sveljko | 0:d13755cfb705 | 181 | enum pubnub_res rslt; |
sveljko | 0:d13755cfb705 | 182 | |
sveljko | 0:d13755cfb705 | 183 | PUBNUB_ASSERT(pb_valid_ctx_ptr(p)); |
sveljko | 0:d13755cfb705 | 184 | |
sveljko | 0:d13755cfb705 | 185 | pubnub_mutex_lock(p->monitor); |
sveljko | 0:d13755cfb705 | 186 | if (p->state != PBS_IDLE) { |
sveljko | 0:d13755cfb705 | 187 | pubnub_mutex_unlock(p->monitor); |
sveljko | 0:d13755cfb705 | 188 | return PNR_IN_PROGRESS; |
sveljko | 0:d13755cfb705 | 189 | } |
sveljko | 0:d13755cfb705 | 190 | |
sveljko | 0:d13755cfb705 | 191 | rslt = pbcc_time_prep(&p->core); |
sveljko | 0:d13755cfb705 | 192 | if (PNR_STARTED == rslt) { |
sveljko | 0:d13755cfb705 | 193 | p->trans = PBTT_TIME; |
sveljko | 0:d13755cfb705 | 194 | p->core.last_result = PNR_STARTED; |
sveljko | 0:d13755cfb705 | 195 | pbnc_fsm(p); |
sveljko | 0:d13755cfb705 | 196 | rslt = p->core.last_result; |
sveljko | 0:d13755cfb705 | 197 | } |
sveljko | 0:d13755cfb705 | 198 | |
sveljko | 0:d13755cfb705 | 199 | pubnub_mutex_unlock(p->monitor); |
sveljko | 0:d13755cfb705 | 200 | return rslt; |
sveljko | 0:d13755cfb705 | 201 | } |
sveljko | 0:d13755cfb705 | 202 | |
sveljko | 0:d13755cfb705 | 203 | |
sveljko | 0:d13755cfb705 | 204 | enum pubnub_res pubnub_history(pubnub_t *pb, const char *channel, unsigned count, bool include_token) |
sveljko | 0:d13755cfb705 | 205 | { |
sveljko | 0:d13755cfb705 | 206 | enum pubnub_res rslt; |
sveljko | 0:d13755cfb705 | 207 | |
sveljko | 0:d13755cfb705 | 208 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 209 | |
sveljko | 0:d13755cfb705 | 210 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 211 | if (pb->state != PBS_IDLE) { |
sveljko | 0:d13755cfb705 | 212 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 213 | return PNR_IN_PROGRESS; |
sveljko | 0:d13755cfb705 | 214 | } |
sveljko | 0:d13755cfb705 | 215 | |
sveljko | 0:d13755cfb705 | 216 | rslt = pbcc_history_prep(&pb->core, channel, count, include_token); |
sveljko | 0:d13755cfb705 | 217 | if (PNR_STARTED == rslt) { |
sveljko | 0:d13755cfb705 | 218 | pb->trans = PBTT_HISTORY; |
sveljko | 0:d13755cfb705 | 219 | pb->core.last_result = PNR_STARTED; |
sveljko | 0:d13755cfb705 | 220 | pbnc_fsm(pb); |
sveljko | 0:d13755cfb705 | 221 | rslt = pb->core.last_result; |
sveljko | 0:d13755cfb705 | 222 | } |
sveljko | 0:d13755cfb705 | 223 | |
sveljko | 0:d13755cfb705 | 224 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 225 | return rslt; |
sveljko | 0:d13755cfb705 | 226 | } |
sveljko | 0:d13755cfb705 | 227 | |
sveljko | 0:d13755cfb705 | 228 | |
sveljko | 0:d13755cfb705 | 229 | enum pubnub_res pubnub_heartbeat(pubnub_t *pb, const char *channel, const char *channel_group) |
sveljko | 0:d13755cfb705 | 230 | { |
sveljko | 0:d13755cfb705 | 231 | enum pubnub_res rslt; |
sveljko | 0:d13755cfb705 | 232 | |
sveljko | 0:d13755cfb705 | 233 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 234 | |
sveljko | 0:d13755cfb705 | 235 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 236 | if (pb->state != PBS_IDLE) { |
sveljko | 0:d13755cfb705 | 237 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 238 | return PNR_IN_PROGRESS; |
sveljko | 0:d13755cfb705 | 239 | } |
sveljko | 0:d13755cfb705 | 240 | |
sveljko | 0:d13755cfb705 | 241 | rslt = pbcc_heartbeat_prep(&pb->core, channel, channel_group); |
sveljko | 0:d13755cfb705 | 242 | if (PNR_STARTED == rslt) { |
sveljko | 0:d13755cfb705 | 243 | pb->trans = PBTT_HEARTBEAT; |
sveljko | 0:d13755cfb705 | 244 | pb->core.last_result = PNR_STARTED; |
sveljko | 0:d13755cfb705 | 245 | pbnc_fsm(pb); |
sveljko | 0:d13755cfb705 | 246 | rslt = pb->core.last_result; |
sveljko | 0:d13755cfb705 | 247 | } |
sveljko | 0:d13755cfb705 | 248 | |
sveljko | 0:d13755cfb705 | 249 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 250 | return rslt; |
sveljko | 0:d13755cfb705 | 251 | } |
sveljko | 0:d13755cfb705 | 252 | |
sveljko | 0:d13755cfb705 | 253 | |
sveljko | 0:d13755cfb705 | 254 | enum pubnub_res pubnub_here_now(pubnub_t *pb, const char *channel, const char *channel_group) |
sveljko | 0:d13755cfb705 | 255 | { |
sveljko | 0:d13755cfb705 | 256 | enum pubnub_res rslt; |
sveljko | 0:d13755cfb705 | 257 | |
sveljko | 0:d13755cfb705 | 258 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 259 | |
sveljko | 0:d13755cfb705 | 260 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 261 | if (pb->state != PBS_IDLE) { |
sveljko | 0:d13755cfb705 | 262 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 263 | return PNR_IN_PROGRESS; |
sveljko | 0:d13755cfb705 | 264 | } |
sveljko | 0:d13755cfb705 | 265 | |
sveljko | 0:d13755cfb705 | 266 | rslt = pbcc_here_now_prep(&pb->core, channel, channel_group, pbccNotSet, pbccNotSet); |
sveljko | 0:d13755cfb705 | 267 | if (PNR_STARTED == rslt) { |
sveljko | 0:d13755cfb705 | 268 | pb->trans = PBTT_HERENOW; |
sveljko | 0:d13755cfb705 | 269 | pb->core.last_result = PNR_STARTED; |
sveljko | 0:d13755cfb705 | 270 | pbnc_fsm(pb); |
sveljko | 0:d13755cfb705 | 271 | rslt = pb->core.last_result; |
sveljko | 0:d13755cfb705 | 272 | } |
sveljko | 0:d13755cfb705 | 273 | |
sveljko | 0:d13755cfb705 | 274 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 275 | return rslt; |
sveljko | 0:d13755cfb705 | 276 | } |
sveljko | 0:d13755cfb705 | 277 | |
sveljko | 0:d13755cfb705 | 278 | |
sveljko | 0:d13755cfb705 | 279 | enum pubnub_res pubnub_global_here_now(pubnub_t *pb) |
sveljko | 0:d13755cfb705 | 280 | { |
sveljko | 0:d13755cfb705 | 281 | enum pubnub_res rslt; |
sveljko | 0:d13755cfb705 | 282 | |
sveljko | 0:d13755cfb705 | 283 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 284 | |
sveljko | 0:d13755cfb705 | 285 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 286 | if (pb->state != PBS_IDLE) { |
sveljko | 0:d13755cfb705 | 287 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 288 | return PNR_IN_PROGRESS; |
sveljko | 0:d13755cfb705 | 289 | } |
sveljko | 0:d13755cfb705 | 290 | |
sveljko | 0:d13755cfb705 | 291 | rslt = pbcc_here_now_prep(&pb->core, NULL, NULL, pbccNotSet, pbccNotSet); |
sveljko | 0:d13755cfb705 | 292 | if (PNR_STARTED == rslt) { |
sveljko | 0:d13755cfb705 | 293 | pb->trans = PBTT_GLOBAL_HERENOW; |
sveljko | 0:d13755cfb705 | 294 | pb->core.last_result = PNR_STARTED; |
sveljko | 0:d13755cfb705 | 295 | pbnc_fsm(pb); |
sveljko | 0:d13755cfb705 | 296 | rslt = pb->core.last_result; |
sveljko | 0:d13755cfb705 | 297 | } |
sveljko | 0:d13755cfb705 | 298 | |
sveljko | 0:d13755cfb705 | 299 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 300 | return rslt; |
sveljko | 0:d13755cfb705 | 301 | } |
sveljko | 0:d13755cfb705 | 302 | |
sveljko | 0:d13755cfb705 | 303 | |
sveljko | 0:d13755cfb705 | 304 | enum pubnub_res pubnub_where_now(pubnub_t *pb, const char *uuid) |
sveljko | 0:d13755cfb705 | 305 | { |
sveljko | 0:d13755cfb705 | 306 | enum pubnub_res rslt; |
sveljko | 0:d13755cfb705 | 307 | |
sveljko | 0:d13755cfb705 | 308 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 309 | |
sveljko | 0:d13755cfb705 | 310 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 311 | if (pb->state != PBS_IDLE) { |
sveljko | 0:d13755cfb705 | 312 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 313 | return PNR_IN_PROGRESS; |
sveljko | 0:d13755cfb705 | 314 | } |
sveljko | 0:d13755cfb705 | 315 | |
sveljko | 0:d13755cfb705 | 316 | rslt = pbcc_where_now_prep(&pb->core, uuid ? uuid : pb->core.uuid); |
sveljko | 0:d13755cfb705 | 317 | if (PNR_STARTED == rslt) { |
sveljko | 0:d13755cfb705 | 318 | pb->trans = PBTT_WHERENOW; |
sveljko | 0:d13755cfb705 | 319 | pb->core.last_result = PNR_STARTED; |
sveljko | 0:d13755cfb705 | 320 | pbnc_fsm(pb); |
sveljko | 0:d13755cfb705 | 321 | rslt = pb->core.last_result; |
sveljko | 0:d13755cfb705 | 322 | } |
sveljko | 0:d13755cfb705 | 323 | |
sveljko | 0:d13755cfb705 | 324 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 325 | return rslt; |
sveljko | 0:d13755cfb705 | 326 | } |
sveljko | 0:d13755cfb705 | 327 | |
sveljko | 0:d13755cfb705 | 328 | |
sveljko | 0:d13755cfb705 | 329 | enum pubnub_res pubnub_set_state(pubnub_t *pb, char const *channel, char const *channel_group, const char *uuid, char const *state) |
sveljko | 0:d13755cfb705 | 330 | { |
sveljko | 0:d13755cfb705 | 331 | enum pubnub_res rslt; |
sveljko | 0:d13755cfb705 | 332 | |
sveljko | 0:d13755cfb705 | 333 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 334 | |
sveljko | 0:d13755cfb705 | 335 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 336 | if (pb->state != PBS_IDLE) { |
sveljko | 0:d13755cfb705 | 337 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 338 | return PNR_IN_PROGRESS; |
sveljko | 0:d13755cfb705 | 339 | } |
sveljko | 0:d13755cfb705 | 340 | |
sveljko | 0:d13755cfb705 | 341 | rslt = pbcc_set_state_prep(&pb->core, channel, channel_group, uuid ? uuid : pb->core.uuid, state); |
sveljko | 0:d13755cfb705 | 342 | if (PNR_STARTED == rslt) { |
sveljko | 0:d13755cfb705 | 343 | pb->trans = PBTT_SET_STATE; |
sveljko | 0:d13755cfb705 | 344 | pb->core.last_result = PNR_STARTED; |
sveljko | 0:d13755cfb705 | 345 | pbnc_fsm(pb); |
sveljko | 0:d13755cfb705 | 346 | rslt = pb->core.last_result; |
sveljko | 0:d13755cfb705 | 347 | } |
sveljko | 0:d13755cfb705 | 348 | |
sveljko | 0:d13755cfb705 | 349 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 350 | return rslt; |
sveljko | 0:d13755cfb705 | 351 | } |
sveljko | 0:d13755cfb705 | 352 | |
sveljko | 0:d13755cfb705 | 353 | |
sveljko | 0:d13755cfb705 | 354 | enum pubnub_res pubnub_state_get(pubnub_t *pb, char const *channel, char const *channel_group, const char *uuid) |
sveljko | 0:d13755cfb705 | 355 | { |
sveljko | 0:d13755cfb705 | 356 | enum pubnub_res rslt; |
sveljko | 0:d13755cfb705 | 357 | |
sveljko | 0:d13755cfb705 | 358 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 359 | |
sveljko | 0:d13755cfb705 | 360 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 361 | if (pb->state != PBS_IDLE) { |
sveljko | 0:d13755cfb705 | 362 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 363 | return PNR_IN_PROGRESS; |
sveljko | 0:d13755cfb705 | 364 | } |
sveljko | 0:d13755cfb705 | 365 | |
sveljko | 0:d13755cfb705 | 366 | rslt = pbcc_state_get_prep(&pb->core, channel, channel_group, uuid ? uuid : pb->core.uuid); |
sveljko | 0:d13755cfb705 | 367 | if (PNR_STARTED == rslt) { |
sveljko | 0:d13755cfb705 | 368 | pb->trans = PBTT_STATE_GET; |
sveljko | 0:d13755cfb705 | 369 | pb->core.last_result = PNR_STARTED; |
sveljko | 0:d13755cfb705 | 370 | pbnc_fsm(pb); |
sveljko | 0:d13755cfb705 | 371 | rslt = pb->core.last_result; |
sveljko | 0:d13755cfb705 | 372 | } |
sveljko | 0:d13755cfb705 | 373 | |
sveljko | 0:d13755cfb705 | 374 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 375 | return rslt; |
sveljko | 0:d13755cfb705 | 376 | } |
sveljko | 0:d13755cfb705 | 377 | |
sveljko | 0:d13755cfb705 | 378 | |
sveljko | 0:d13755cfb705 | 379 | enum pubnub_res pubnub_remove_channel_group(pubnub_t *pb, char const *channel_group) |
sveljko | 0:d13755cfb705 | 380 | { |
sveljko | 0:d13755cfb705 | 381 | enum pubnub_res rslt; |
sveljko | 0:d13755cfb705 | 382 | |
sveljko | 0:d13755cfb705 | 383 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 384 | |
sveljko | 0:d13755cfb705 | 385 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 386 | if (pb->state != PBS_IDLE) { |
sveljko | 0:d13755cfb705 | 387 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 388 | return PNR_IN_PROGRESS; |
sveljko | 0:d13755cfb705 | 389 | } |
sveljko | 0:d13755cfb705 | 390 | |
sveljko | 0:d13755cfb705 | 391 | rslt = pbcc_remove_channel_group_prep(&pb->core, channel_group); |
sveljko | 0:d13755cfb705 | 392 | if (PNR_STARTED == rslt) { |
sveljko | 0:d13755cfb705 | 393 | pb->trans = PBTT_REMOVE_CHANNEL_GROUP; |
sveljko | 0:d13755cfb705 | 394 | pb->core.last_result = PNR_STARTED; |
sveljko | 0:d13755cfb705 | 395 | pbnc_fsm(pb); |
sveljko | 0:d13755cfb705 | 396 | rslt = pb->core.last_result; |
sveljko | 0:d13755cfb705 | 397 | } |
sveljko | 0:d13755cfb705 | 398 | |
sveljko | 0:d13755cfb705 | 399 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 400 | return rslt; |
sveljko | 0:d13755cfb705 | 401 | } |
sveljko | 0:d13755cfb705 | 402 | |
sveljko | 0:d13755cfb705 | 403 | |
sveljko | 0:d13755cfb705 | 404 | enum pubnub_res pubnub_remove_channel_from_group(pubnub_t *pb, char const *channel, char const *channel_group) |
sveljko | 0:d13755cfb705 | 405 | { |
sveljko | 0:d13755cfb705 | 406 | enum pubnub_res rslt; |
sveljko | 0:d13755cfb705 | 407 | |
sveljko | 0:d13755cfb705 | 408 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 409 | |
sveljko | 0:d13755cfb705 | 410 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 411 | if (pb->state != PBS_IDLE) { |
sveljko | 0:d13755cfb705 | 412 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 413 | return PNR_IN_PROGRESS; |
sveljko | 0:d13755cfb705 | 414 | } |
sveljko | 0:d13755cfb705 | 415 | |
sveljko | 0:d13755cfb705 | 416 | rslt = pbcc_channel_registry_prep(&pb->core, channel_group, "remove", channel); |
sveljko | 0:d13755cfb705 | 417 | if (PNR_STARTED == rslt) { |
sveljko | 0:d13755cfb705 | 418 | pb->trans = PBTT_REMOVE_CHANNEL_FROM_GROUP; |
sveljko | 0:d13755cfb705 | 419 | pb->core.last_result = PNR_STARTED; |
sveljko | 0:d13755cfb705 | 420 | pbnc_fsm(pb); |
sveljko | 0:d13755cfb705 | 421 | rslt = pb->core.last_result; |
sveljko | 0:d13755cfb705 | 422 | } |
sveljko | 0:d13755cfb705 | 423 | |
sveljko | 0:d13755cfb705 | 424 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 425 | return rslt; |
sveljko | 0:d13755cfb705 | 426 | } |
sveljko | 0:d13755cfb705 | 427 | |
sveljko | 0:d13755cfb705 | 428 | |
sveljko | 0:d13755cfb705 | 429 | enum pubnub_res pubnub_add_channel_to_group(pubnub_t *pb, char const *channel, char const *channel_group) |
sveljko | 0:d13755cfb705 | 430 | { |
sveljko | 0:d13755cfb705 | 431 | enum pubnub_res rslt; |
sveljko | 0:d13755cfb705 | 432 | |
sveljko | 0:d13755cfb705 | 433 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 434 | |
sveljko | 0:d13755cfb705 | 435 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 436 | if (pb->state != PBS_IDLE) { |
sveljko | 0:d13755cfb705 | 437 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 438 | return PNR_IN_PROGRESS; |
sveljko | 0:d13755cfb705 | 439 | } |
sveljko | 0:d13755cfb705 | 440 | |
sveljko | 0:d13755cfb705 | 441 | rslt = pbcc_channel_registry_prep(&pb->core, channel_group, "add", channel); |
sveljko | 0:d13755cfb705 | 442 | if (PNR_STARTED == rslt) { |
sveljko | 0:d13755cfb705 | 443 | pb->trans = PBTT_ADD_CHANNEL_TO_GROUP; |
sveljko | 0:d13755cfb705 | 444 | pb->core.last_result = PNR_STARTED; |
sveljko | 0:d13755cfb705 | 445 | pbnc_fsm(pb); |
sveljko | 0:d13755cfb705 | 446 | rslt = pb->core.last_result; |
sveljko | 0:d13755cfb705 | 447 | } |
sveljko | 0:d13755cfb705 | 448 | |
sveljko | 0:d13755cfb705 | 449 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 450 | return rslt; |
sveljko | 0:d13755cfb705 | 451 | } |
sveljko | 0:d13755cfb705 | 452 | |
sveljko | 0:d13755cfb705 | 453 | |
sveljko | 0:d13755cfb705 | 454 | enum pubnub_res pubnub_list_channel_group(pubnub_t *pb, char const *channel_group) |
sveljko | 0:d13755cfb705 | 455 | { |
sveljko | 0:d13755cfb705 | 456 | enum pubnub_res rslt; |
sveljko | 0:d13755cfb705 | 457 | |
sveljko | 0:d13755cfb705 | 458 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 459 | |
sveljko | 0:d13755cfb705 | 460 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 461 | if (pb->state != PBS_IDLE) { |
sveljko | 0:d13755cfb705 | 462 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 463 | return PNR_IN_PROGRESS; |
sveljko | 0:d13755cfb705 | 464 | } |
sveljko | 0:d13755cfb705 | 465 | |
sveljko | 0:d13755cfb705 | 466 | rslt = pbcc_channel_registry_prep(&pb->core, channel_group, NULL, NULL); |
sveljko | 0:d13755cfb705 | 467 | if (PNR_STARTED == rslt) { |
sveljko | 0:d13755cfb705 | 468 | pb->trans = PBTT_LIST_CHANNEL_GROUP; |
sveljko | 0:d13755cfb705 | 469 | pb->core.last_result = PNR_STARTED; |
sveljko | 0:d13755cfb705 | 470 | pbnc_fsm(pb); |
sveljko | 0:d13755cfb705 | 471 | rslt = pb->core.last_result; |
sveljko | 0:d13755cfb705 | 472 | } |
sveljko | 0:d13755cfb705 | 473 | |
sveljko | 0:d13755cfb705 | 474 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 475 | return rslt; |
sveljko | 0:d13755cfb705 | 476 | } |
sveljko | 0:d13755cfb705 | 477 | |
sveljko | 0:d13755cfb705 | 478 | |
sveljko | 0:d13755cfb705 | 479 | void pubnub_cancel(pubnub_t *pb) |
sveljko | 0:d13755cfb705 | 480 | { |
sveljko | 0:d13755cfb705 | 481 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 482 | |
sveljko | 0:d13755cfb705 | 483 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 484 | pbnc_stop(pb, PNR_CANCELLED); |
sveljko | 0:d13755cfb705 | 485 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 486 | } |
sveljko | 0:d13755cfb705 | 487 | |
sveljko | 0:d13755cfb705 | 488 | |
sveljko | 0:d13755cfb705 | 489 | void pubnub_set_uuid(pubnub_t *pb, const char *uuid) |
sveljko | 0:d13755cfb705 | 490 | { |
sveljko | 0:d13755cfb705 | 491 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 492 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 493 | pbcc_set_uuid(&pb->core, uuid); |
sveljko | 0:d13755cfb705 | 494 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 495 | } |
sveljko | 0:d13755cfb705 | 496 | |
sveljko | 0:d13755cfb705 | 497 | |
sveljko | 0:d13755cfb705 | 498 | char const *pubnub_uuid_get(pubnub_t *pb) |
sveljko | 0:d13755cfb705 | 499 | { |
sveljko | 0:d13755cfb705 | 500 | char const *result; |
sveljko | 0:d13755cfb705 | 501 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 502 | |
sveljko | 0:d13755cfb705 | 503 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 504 | result = pb->core.uuid; |
sveljko | 0:d13755cfb705 | 505 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 506 | |
sveljko | 0:d13755cfb705 | 507 | return result; |
sveljko | 0:d13755cfb705 | 508 | } |
sveljko | 0:d13755cfb705 | 509 | |
sveljko | 0:d13755cfb705 | 510 | |
sveljko | 0:d13755cfb705 | 511 | void pubnub_set_auth(pubnub_t *pb, const char *auth) |
sveljko | 0:d13755cfb705 | 512 | { |
sveljko | 0:d13755cfb705 | 513 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 514 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 515 | pbcc_set_auth(&pb->core, auth); |
sveljko | 0:d13755cfb705 | 516 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 517 | } |
sveljko | 0:d13755cfb705 | 518 | |
sveljko | 0:d13755cfb705 | 519 | |
sveljko | 0:d13755cfb705 | 520 | char const *pubnub_auth_get(pubnub_t *pb) |
sveljko | 0:d13755cfb705 | 521 | { |
sveljko | 0:d13755cfb705 | 522 | char const *result; |
sveljko | 0:d13755cfb705 | 523 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 524 | |
sveljko | 0:d13755cfb705 | 525 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 526 | result = pb->core.auth; |
sveljko | 0:d13755cfb705 | 527 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 528 | |
sveljko | 0:d13755cfb705 | 529 | return result; |
sveljko | 0:d13755cfb705 | 530 | } |
sveljko | 0:d13755cfb705 | 531 | |
sveljko | 0:d13755cfb705 | 532 | |
sveljko | 0:d13755cfb705 | 533 | int pubnub_last_http_code(pubnub_t *pb) |
sveljko | 0:d13755cfb705 | 534 | { |
sveljko | 0:d13755cfb705 | 535 | int result; |
sveljko | 0:d13755cfb705 | 536 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 537 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 538 | result = pb->http_code; |
sveljko | 0:d13755cfb705 | 539 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 540 | return result; |
sveljko | 0:d13755cfb705 | 541 | } |
sveljko | 0:d13755cfb705 | 542 | |
sveljko | 0:d13755cfb705 | 543 | |
sveljko | 0:d13755cfb705 | 544 | char const *pubnub_last_time_token(pubnub_t *pb) |
sveljko | 0:d13755cfb705 | 545 | { |
sveljko | 0:d13755cfb705 | 546 | char const *result; |
sveljko | 0:d13755cfb705 | 547 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 548 | |
sveljko | 0:d13755cfb705 | 549 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 550 | result = pb->core.timetoken; |
sveljko | 0:d13755cfb705 | 551 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 552 | |
sveljko | 0:d13755cfb705 | 553 | return result; |
sveljko | 0:d13755cfb705 | 554 | } |
sveljko | 0:d13755cfb705 | 555 | |
sveljko | 0:d13755cfb705 | 556 | |
sveljko | 0:d13755cfb705 | 557 | char const *pubnub_last_publish_result(pubnub_t *pb) |
sveljko | 0:d13755cfb705 | 558 | { |
sveljko | 0:d13755cfb705 | 559 | char *end; |
sveljko | 0:d13755cfb705 | 560 | |
sveljko | 0:d13755cfb705 | 561 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 562 | |
sveljko | 0:d13755cfb705 | 563 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 564 | if (PUBNUB_DYNAMIC_REPLY_BUFFER && (NULL == pb->core.http_reply)) { |
sveljko | 0:d13755cfb705 | 565 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 566 | return ""; |
sveljko | 0:d13755cfb705 | 567 | } |
sveljko | 0:d13755cfb705 | 568 | if ((pb->trans != PBTT_PUBLISH) || (pb->core.http_reply[0] == '\0')) { |
sveljko | 0:d13755cfb705 | 569 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 570 | return ""; |
sveljko | 0:d13755cfb705 | 571 | } |
sveljko | 0:d13755cfb705 | 572 | for (end = pb->core.http_reply + 1; isdigit((unsigned)*end); ++end) { |
sveljko | 0:d13755cfb705 | 573 | continue; |
sveljko | 0:d13755cfb705 | 574 | } |
sveljko | 0:d13755cfb705 | 575 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 576 | |
sveljko | 0:d13755cfb705 | 577 | return end + 1; |
sveljko | 0:d13755cfb705 | 578 | } |
sveljko | 0:d13755cfb705 | 579 | |
sveljko | 0:d13755cfb705 | 580 | |
sveljko | 0:d13755cfb705 | 581 | char const *pubnub_get_origin(pubnub_t *pb) |
sveljko | 0:d13755cfb705 | 582 | { |
sveljko | 0:d13755cfb705 | 583 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 584 | if (PUBNUB_ORIGIN_SETTABLE) { |
sveljko | 0:d13755cfb705 | 585 | char const *result; |
sveljko | 0:d13755cfb705 | 586 | |
sveljko | 0:d13755cfb705 | 587 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 588 | result = pb->origin; |
sveljko | 0:d13755cfb705 | 589 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 590 | |
sveljko | 0:d13755cfb705 | 591 | return result; |
sveljko | 0:d13755cfb705 | 592 | } |
sveljko | 0:d13755cfb705 | 593 | return PUBNUB_ORIGIN; |
sveljko | 0:d13755cfb705 | 594 | } |
sveljko | 0:d13755cfb705 | 595 | |
sveljko | 0:d13755cfb705 | 596 | |
sveljko | 0:d13755cfb705 | 597 | int pubnub_origin_set(pubnub_t *pb, char const *origin) |
sveljko | 0:d13755cfb705 | 598 | { |
sveljko | 0:d13755cfb705 | 599 | PUBNUB_ASSERT(pb_valid_ctx_ptr(pb)); |
sveljko | 0:d13755cfb705 | 600 | if (PUBNUB_ORIGIN_SETTABLE) { |
sveljko | 0:d13755cfb705 | 601 | if (NULL == origin) { |
sveljko | 0:d13755cfb705 | 602 | origin = PUBNUB_ORIGIN; |
sveljko | 0:d13755cfb705 | 603 | } |
sveljko | 0:d13755cfb705 | 604 | |
sveljko | 0:d13755cfb705 | 605 | pubnub_mutex_lock(pb->monitor); |
sveljko | 0:d13755cfb705 | 606 | pb->origin = origin; |
sveljko | 0:d13755cfb705 | 607 | pubnub_mutex_unlock(pb->monitor); |
sveljko | 0:d13755cfb705 | 608 | |
sveljko | 0:d13755cfb705 | 609 | return 0; |
sveljko | 0:d13755cfb705 | 610 | } |
sveljko | 0:d13755cfb705 | 611 | return -1; |
sveljko | 0:d13755cfb705 | 612 | } |