Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: EthernetInterface NTPClient iothub_amqp_transport iothub_client mbed-rtos mbed
Fork of iothub_client_sample_amqp by
cbs.c
00001 // Copyright (c) Microsoft. All rights reserved. 00002 // Licensed under the MIT license. See LICENSE file in the project root for full license information. 00003 00004 #include <stdlib.h> 00005 #ifdef _CRTDBG_MAP_ALLOC 00006 #include <crtdbg.h> 00007 #endif 00008 00009 #include <stdbool.h> 00010 #include <stdio.h> 00011 #include <string.h> 00012 #include "azure_uamqp_c/cbs.h" 00013 #include "azure_uamqp_c/amqp_management.h" 00014 #include "azure_uamqp_c/amqpalloc.h" 00015 #include "azure_uamqp_c/session.h" 00016 00017 typedef struct CBS_INSTANCE_TAG 00018 { 00019 AMQP_MANAGEMENT_HANDLE amqp_management; 00020 } CBS_INSTANCE; 00021 00022 static int add_string_key_value_pair_to_map(AMQP_VALUE map, const char* key, const char* value) 00023 { 00024 int result; 00025 00026 AMQP_VALUE key_value = amqpvalue_create_string(key); 00027 if (key == NULL) 00028 { 00029 result = __LINE__; 00030 } 00031 else 00032 { 00033 AMQP_VALUE value_value = amqpvalue_create_string(value); 00034 if (value_value == NULL) 00035 { 00036 result = __LINE__; 00037 } 00038 else 00039 { 00040 if (amqpvalue_set_map_value(map, key_value, value_value) != 0) 00041 { 00042 result = __LINE__; 00043 } 00044 else 00045 { 00046 result = 0; 00047 } 00048 00049 amqpvalue_destroy(key_value); 00050 } 00051 00052 amqpvalue_destroy(value_value); 00053 } 00054 00055 return result; 00056 } 00057 00058 static int set_pending_operation_properties(MESSAGE_HANDLE message) 00059 { 00060 int result = 0; 00061 00062 PROPERTIES_HANDLE properties = properties_create(); 00063 if (properties == NULL) 00064 { 00065 result = __LINE__; 00066 } 00067 else 00068 { 00069 AMQP_VALUE reply_to = amqpvalue_create_address_string("cbs"); 00070 if (reply_to == NULL) 00071 { 00072 result = __LINE__; 00073 } 00074 else 00075 { 00076 if (properties_set_reply_to(properties, reply_to) != 0) 00077 { 00078 result = __LINE__; 00079 } 00080 00081 amqpvalue_destroy(reply_to); 00082 } 00083 00084 AMQP_VALUE message_id = amqpvalue_create_message_id_ulong(0x43); 00085 if (message_id == NULL) 00086 { 00087 result = __LINE__; 00088 } 00089 else 00090 { 00091 if (properties_set_message_id(properties, message_id) != 0) 00092 { 00093 result = __LINE__; 00094 } 00095 00096 amqpvalue_destroy(message_id); 00097 } 00098 00099 if (message_set_properties(message, properties) != 0) 00100 { 00101 result = __LINE__; 00102 } 00103 00104 properties_destroy(properties); 00105 } 00106 00107 return result; 00108 } 00109 00110 CBS_HANDLE cbs_create(SESSION_HANDLE session, ON_AMQP_MANAGEMENT_STATE_CHANGED on_amqp_management_state_changed, void* callback_context) 00111 { 00112 CBS_INSTANCE* result; 00113 00114 if (session == NULL) 00115 { 00116 result = NULL; 00117 } 00118 else 00119 { 00120 result = (CBS_INSTANCE*)amqpalloc_malloc(sizeof(CBS_INSTANCE)); 00121 if (result != NULL) 00122 { 00123 result->amqp_management = amqpmanagement_create(session, "$cbs", on_amqp_management_state_changed, callback_context); 00124 if (result->amqp_management == NULL) 00125 { 00126 amqpalloc_free(result); 00127 result = NULL; 00128 } 00129 } 00130 } 00131 return result; 00132 } 00133 00134 void cbs_destroy(CBS_HANDLE cbs) 00135 { 00136 if (cbs != NULL) 00137 { 00138 (void)cbs_close(cbs); 00139 amqpmanagement_destroy(cbs->amqp_management); 00140 amqpalloc_free(cbs); 00141 } 00142 } 00143 00144 int cbs_open(CBS_HANDLE cbs) 00145 { 00146 int result; 00147 00148 if (cbs == NULL) 00149 { 00150 result = __LINE__; 00151 } 00152 else 00153 { 00154 if (amqpmanagement_open(cbs->amqp_management) != 0) 00155 { 00156 result = __LINE__; 00157 } 00158 else 00159 { 00160 result = 0; 00161 } 00162 } 00163 00164 return result; 00165 } 00166 00167 int cbs_close(CBS_HANDLE cbs) 00168 { 00169 int result; 00170 00171 if (cbs == NULL) 00172 { 00173 result = __LINE__; 00174 } 00175 else 00176 { 00177 if (amqpmanagement_close(cbs->amqp_management) != 0) 00178 { 00179 result = __LINE__; 00180 } 00181 else 00182 { 00183 result = 0; 00184 } 00185 } 00186 00187 return result; 00188 } 00189 00190 int cbs_put_token(CBS_HANDLE cbs, const char* type, const char* audience, const char* token, ON_CBS_OPERATION_COMPLETE on_operation_complete, void* context) 00191 { 00192 int result; 00193 00194 if ((cbs == NULL) || 00195 (token == NULL)) 00196 { 00197 result = __LINE__; 00198 } 00199 else 00200 { 00201 MESSAGE_HANDLE message = message_create(); 00202 if (message == NULL) 00203 { 00204 result = __LINE__; 00205 } 00206 else 00207 { 00208 AMQP_VALUE token_value = amqpvalue_create_string(token); 00209 if (token_value == NULL) 00210 { 00211 message_destroy(message); 00212 result = __LINE__; 00213 } 00214 else 00215 { 00216 if (message_set_body_amqp_value(message, token_value) != 0) 00217 { 00218 result = __LINE__; 00219 } 00220 else 00221 { 00222 AMQP_VALUE application_properties = amqpvalue_create_map(); 00223 if (application_properties == NULL) 00224 { 00225 result = __LINE__; 00226 } 00227 else 00228 { 00229 if (add_string_key_value_pair_to_map(application_properties, "name", audience) != 0) 00230 { 00231 result = __LINE__; 00232 } 00233 else 00234 { 00235 if (message_set_application_properties(message, application_properties) != 0) 00236 { 00237 result = __LINE__; 00238 } 00239 else 00240 { 00241 if (set_pending_operation_properties(message) != 0) 00242 { 00243 result = __LINE__; 00244 } 00245 else 00246 { 00247 if (amqpmanagement_start_operation(cbs->amqp_management, "put-token", type, NULL, message, (ON_OPERATION_COMPLETE)on_operation_complete, context) != 0) 00248 { 00249 result = __LINE__; 00250 } 00251 else 00252 { 00253 result = 0; 00254 } 00255 } 00256 } 00257 } 00258 00259 amqpvalue_destroy(application_properties); 00260 } 00261 00262 amqpvalue_destroy(token_value); 00263 } 00264 } 00265 00266 message_destroy(message); 00267 } 00268 } 00269 00270 return result; 00271 } 00272 00273 int cbs_delete_token(CBS_HANDLE cbs, const char* type, const char* audience, ON_CBS_OPERATION_COMPLETE on_operation_complete, void* context) 00274 { 00275 int result; 00276 00277 if (cbs == NULL) 00278 { 00279 result = __LINE__; 00280 } 00281 else 00282 { 00283 MESSAGE_HANDLE message = message_create(); 00284 if (message == NULL) 00285 { 00286 result = __LINE__; 00287 } 00288 else 00289 { 00290 AMQP_VALUE application_properties = amqpvalue_create_map(); 00291 if (application_properties == NULL) 00292 { 00293 result = __LINE__; 00294 } 00295 else 00296 { 00297 if (add_string_key_value_pair_to_map(application_properties, "name", audience) != 0) 00298 { 00299 result = __LINE__; 00300 } 00301 else 00302 { 00303 if (message_set_application_properties(message, application_properties) != 0) 00304 { 00305 result = __LINE__; 00306 } 00307 else 00308 { 00309 if (set_pending_operation_properties(message) != 0) 00310 { 00311 result = __LINE__; 00312 } 00313 else 00314 { 00315 if (amqpmanagement_start_operation(cbs->amqp_management, "delete-token", type, NULL, message, (ON_OPERATION_COMPLETE)on_operation_complete, context) != 0) 00316 { 00317 result = __LINE__; 00318 } 00319 else 00320 { 00321 result = 0; 00322 } 00323 } 00324 } 00325 } 00326 00327 amqpvalue_destroy(application_properties); 00328 } 00329 00330 message_destroy(message); 00331 } 00332 } 00333 return result; 00334 } 00335 00336 void cbs_set_trace(CBS_HANDLE cbs, bool traceOn) 00337 { 00338 if (cbs != NULL) 00339 { 00340 amqpmanagement_set_trace(cbs->amqp_management, traceOn); 00341 } 00342 }
Generated on Tue Jul 12 2022 12:43:17 by
