A small memory footprint AMQP implimentation

Dependents:   iothub_client_sample_amqp remote_monitoring simplesample_amqp

Revision:
6:641a9672db08
Parent:
5:ae49385aff34
Child:
17:923575db8b2d
--- a/cbs.c	Fri Jul 01 10:42:48 2016 -0700
+++ b/cbs.c	Fri Jul 29 15:58:39 2016 -0700
@@ -6,6 +6,7 @@
 #include <crtdbg.h>
 #endif
 
+#include <stdbool.h>
 #include <stdio.h>
 #include <string.h>
 #include "azure_uamqp_c/cbs.h"
@@ -15,321 +16,327 @@
 
 typedef struct CBS_INSTANCE_TAG
 {
-	AMQP_MANAGEMENT_HANDLE amqp_management;
+    AMQP_MANAGEMENT_HANDLE amqp_management;
 } CBS_INSTANCE;
 
 static int add_string_key_value_pair_to_map(AMQP_VALUE map, const char* key, const char* value)
 {
-	int result;
+    int result;
 
-	AMQP_VALUE key_value = amqpvalue_create_string(key);
-	if (key == NULL)
-	{
-		result = __LINE__;
-	}
-	else
-	{
-		AMQP_VALUE value_value = amqpvalue_create_string(value);
-		if (value_value == NULL)
-		{
-			result = __LINE__;
-		}
-		else
-		{
-			if (amqpvalue_set_map_value(map, key_value, value_value) != 0)
-			{
-				result = __LINE__;
-			}
-			else
-			{
-				result = 0;
-			}
+    AMQP_VALUE key_value = amqpvalue_create_string(key);
+    if (key == NULL)
+    {
+        result = __LINE__;
+    }
+    else
+    {
+        AMQP_VALUE value_value = amqpvalue_create_string(value);
+        if (value_value == NULL)
+        {
+            result = __LINE__;
+        }
+        else
+        {
+            if (amqpvalue_set_map_value(map, key_value, value_value) != 0)
+            {
+                result = __LINE__;
+            }
+            else
+            {
+                result = 0;
+            }
 
-			amqpvalue_destroy(key_value);
-		}
+            amqpvalue_destroy(key_value);
+        }
 
-		amqpvalue_destroy(value_value);
-	}
+        amqpvalue_destroy(value_value);
+    }
 
-	return result;
+    return result;
 }
 
 static int set_pending_operation_properties(MESSAGE_HANDLE message)
 {
-	int result = 0;
+    int result = 0;
 
-	PROPERTIES_HANDLE properties = properties_create();
-	if (properties == NULL)
-	{
-		result = __LINE__;
-	}
-	else
-	{
-		AMQP_VALUE reply_to = amqpvalue_create_address_string("cbs");
-		if (reply_to == NULL)
-		{
-			result = __LINE__;
-		}
-		else
-		{
-			if (properties_set_reply_to(properties, reply_to) != 0)
-			{
-				result = __LINE__;
-			}
+    PROPERTIES_HANDLE properties = properties_create();
+    if (properties == NULL)
+    {
+        result = __LINE__;
+    }
+    else
+    {
+        AMQP_VALUE reply_to = amqpvalue_create_address_string("cbs");
+        if (reply_to == NULL)
+        {
+            result = __LINE__;
+        }
+        else
+        {
+            if (properties_set_reply_to(properties, reply_to) != 0)
+            {
+                result = __LINE__;
+            }
 
-			amqpvalue_destroy(reply_to);
-		}
+            amqpvalue_destroy(reply_to);
+        }
 
-		AMQP_VALUE message_id = amqpvalue_create_message_id_ulong(0x43);
-		if (message_id == NULL)
-		{
-			result = __LINE__;
-		}
-		else
-		{
-			if (properties_set_message_id(properties, message_id) != 0)
-			{
-				result = __LINE__;
-			}
+        AMQP_VALUE message_id = amqpvalue_create_message_id_ulong(0x43);
+        if (message_id == NULL)
+        {
+            result = __LINE__;
+        }
+        else
+        {
+            if (properties_set_message_id(properties, message_id) != 0)
+            {
+                result = __LINE__;
+            }
 
-			amqpvalue_destroy(message_id);
-		}
+            amqpvalue_destroy(message_id);
+        }
 
-		if (message_set_properties(message, properties) != 0)
-		{
-			result = __LINE__;
-		}
+        if (message_set_properties(message, properties) != 0)
+        {
+            result = __LINE__;
+        }
 
-		properties_destroy(properties);
-	}
+        properties_destroy(properties);
+    }
 
-	return result;
+    return result;
 }
 
 CBS_HANDLE cbs_create(SESSION_HANDLE session, ON_AMQP_MANAGEMENT_STATE_CHANGED on_amqp_management_state_changed, void* callback_context)
 {
-	CBS_INSTANCE* result;
+    CBS_INSTANCE* result;
 
-	if (session == NULL)
-	{
-		result = NULL;
-	}
-	else
-	{
-		result = (CBS_INSTANCE*)amqpalloc_malloc(sizeof(CBS_INSTANCE));
-		if (result != NULL)
-		{
-			result->amqp_management = amqpmanagement_create(session, "$cbs", on_amqp_management_state_changed, callback_context);
-			if (result->amqp_management == NULL)
-			{
-				amqpalloc_free(result);
-				result = NULL;
-			}
-			}
-		}
-
-	return result;
+    if (session == NULL)
+    {
+        result = NULL;
+    }
+    else
+    {
+        result = (CBS_INSTANCE*)amqpalloc_malloc(sizeof(CBS_INSTANCE));
+        if (result != NULL)
+        {
+            result->amqp_management = amqpmanagement_create(session, "$cbs", on_amqp_management_state_changed, callback_context);
+            if (result->amqp_management == NULL)
+            {
+                amqpalloc_free(result);
+                result = NULL;
+            }
+        }
+    }
+    return result;
 }
 
 void cbs_destroy(CBS_HANDLE cbs)
 {
-	if (cbs != NULL)
-	{
-		(void)cbs_close(cbs);
-		amqpmanagement_destroy(cbs->amqp_management);
-		amqpalloc_free(cbs);
-	}
+    if (cbs != NULL)
+    {
+        (void)cbs_close(cbs);
+        amqpmanagement_destroy(cbs->amqp_management);
+        amqpalloc_free(cbs);
+    }
 }
 
 int cbs_open(CBS_HANDLE cbs)
 {
-	int result;
+    int result;
 
-	if (cbs == NULL)
-	{
-		result = __LINE__;
-	}
-	else
-	{
-		if (amqpmanagement_open(cbs->amqp_management) != 0)
-		{
-			result = __LINE__;
-		}
-		else
-		{
-			result = 0;
-		}
-	}
+    if (cbs == NULL)
+    {
+        result = __LINE__;
+    }
+    else
+    {
+        if (amqpmanagement_open(cbs->amqp_management) != 0)
+        {
+            result = __LINE__;
+        }
+        else
+        {
+            result = 0;
+        }
+    }
 
-	return result;
+    return result;
 }
 
 int cbs_close(CBS_HANDLE cbs)
 {
-	int result;
+    int result;
 
-	if (cbs == NULL)
-	{
-		result = __LINE__;
-	}
-	else
-	{
-		if (amqpmanagement_close(cbs->amqp_management) != 0)
-		{
-			result = __LINE__;
-		}
-		else
-		{
-			result = 0;
-		}
-	}
+    if (cbs == NULL)
+    {
+        result = __LINE__;
+    }
+    else
+    {
+        if (amqpmanagement_close(cbs->amqp_management) != 0)
+        {
+            result = __LINE__;
+        }
+        else
+        {
+            result = 0;
+        }
+    }
 
-	return result;
+    return result;
 }
 
 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)
 {
-	int result;
+    int result;
 
-	if ((cbs == NULL) ||
-		(token == NULL))
-	{
-		result = __LINE__;
-	}
-	else
-	{
-		MESSAGE_HANDLE message = message_create();
-		if (message == NULL)
-		{
-			result = __LINE__;
-		}
-		else
-		{
-			AMQP_VALUE token_value = amqpvalue_create_string(token);
-			if (token_value == NULL)
-			{
-				message_destroy(message);
-				result = __LINE__;
-			}
-			else
-			{
-				if (message_set_body_amqp_value(message, token_value) != 0)
-				{
-					result = __LINE__;
-				}
-				else
-				{
-					AMQP_VALUE application_properties = amqpvalue_create_map();
-					if (application_properties == NULL)
-					{
-						result = __LINE__;
-					}
-					else
-					{
-						if (add_string_key_value_pair_to_map(application_properties, "name", audience) != 0)
-						{
-							result = __LINE__;
-						}
-						else
-						{
-							if (message_set_application_properties(message, application_properties) != 0)
-							{
-								result = __LINE__;
-							}
-							else
-							{
-								if (set_pending_operation_properties(message) != 0)
-								{
-									result = __LINE__;
-								}
-								else
-								{
-									if (amqpmanagement_start_operation(cbs->amqp_management, "put-token", type, NULL, message, (ON_OPERATION_COMPLETE)on_operation_complete, context) != 0)
-									{
-										result = __LINE__;
-									}
-									else
-									{
-										result = 0;
-									}
-								}
-							}
-						}
+    if ((cbs == NULL) ||
+        (token == NULL))
+    {
+        result = __LINE__;
+    }
+    else
+    {
+        MESSAGE_HANDLE message = message_create();
+        if (message == NULL)
+        {
+            result = __LINE__;
+        }
+        else
+        {
+            AMQP_VALUE token_value = amqpvalue_create_string(token);
+            if (token_value == NULL)
+            {
+                message_destroy(message);
+                result = __LINE__;
+            }
+            else
+            {
+                if (message_set_body_amqp_value(message, token_value) != 0)
+                {
+                    result = __LINE__;
+                }
+                else
+                {
+                    AMQP_VALUE application_properties = amqpvalue_create_map();
+                    if (application_properties == NULL)
+                    {
+                        result = __LINE__;
+                    }
+                    else
+                    {
+                        if (add_string_key_value_pair_to_map(application_properties, "name", audience) != 0)
+                        {
+                            result = __LINE__;
+                        }
+                        else
+                        {
+                            if (message_set_application_properties(message, application_properties) != 0)
+                            {
+                                result = __LINE__;
+                            }
+                            else
+                            {
+                                if (set_pending_operation_properties(message) != 0)
+                                {
+                                    result = __LINE__;
+                                }
+                                else
+                                {
+                                    if (amqpmanagement_start_operation(cbs->amqp_management, "put-token", type, NULL, message, (ON_OPERATION_COMPLETE)on_operation_complete, context) != 0)
+                                    {
+                                        result = __LINE__;
+                                    }
+                                    else
+                                    {
+                                        result = 0;
+                                    }
+                                }
+                            }
+                        }
 
-						amqpvalue_destroy(application_properties);
-					}
+                        amqpvalue_destroy(application_properties);
+                    }
 
-					amqpvalue_destroy(token_value);
-				}
-			}
+                    amqpvalue_destroy(token_value);
+                }
+            }
 
-			message_destroy(message);
-		}
-	}
+            message_destroy(message);
+        }
+    }
 
-	return result;
+    return result;
 }
 
 int cbs_delete_token(CBS_HANDLE cbs, const char* type, const char* audience, ON_CBS_OPERATION_COMPLETE on_operation_complete, void* context)
 {
-	int result;
+    int result;
 
-	if (cbs == NULL)
-	{
-		result = __LINE__;
-	}
-	else
-	{
-		MESSAGE_HANDLE message = message_create();
-		if (message == NULL)
-		{
-			result = __LINE__;
-		}
-		else
-		{
-			AMQP_VALUE application_properties = amqpvalue_create_map();
-			if (application_properties == NULL)
-			{
-				result = __LINE__;
-			}
-			else
-			{
-				if (add_string_key_value_pair_to_map(application_properties, "name", audience) != 0)
-				{
-					result = __LINE__;
-				}
-				else
-				{
-					if (message_set_application_properties(message, application_properties) != 0)
-					{
-						result = __LINE__;
-					}
-					else
-					{
-						if (set_pending_operation_properties(message) != 0)
-						{
-							result = __LINE__;
-						}
-						else
-						{
-							if (amqpmanagement_start_operation(cbs->amqp_management, "delete-token", type, NULL, message, (ON_OPERATION_COMPLETE)on_operation_complete, context) != 0)
-							{
-								result = __LINE__;
-							}
-							else
-							{
-								result = 0;
-							}
-						}
-					}
-				}
+    if (cbs == NULL)
+    {
+        result = __LINE__;
+    }
+    else
+    {
+        MESSAGE_HANDLE message = message_create();
+        if (message == NULL)
+        {
+            result = __LINE__;
+        }
+        else
+        {
+            AMQP_VALUE application_properties = amqpvalue_create_map();
+            if (application_properties == NULL)
+            {
+                result = __LINE__;
+            }
+            else
+            {
+                if (add_string_key_value_pair_to_map(application_properties, "name", audience) != 0)
+                {
+                    result = __LINE__;
+                }
+                else
+                {
+                    if (message_set_application_properties(message, application_properties) != 0)
+                    {
+                        result = __LINE__;
+                    }
+                    else
+                    {
+                        if (set_pending_operation_properties(message) != 0)
+                        {
+                            result = __LINE__;
+                        }
+                        else
+                        {
+                            if (amqpmanagement_start_operation(cbs->amqp_management, "delete-token", type, NULL, message, (ON_OPERATION_COMPLETE)on_operation_complete, context) != 0)
+                            {
+                                result = __LINE__;
+                            }
+                            else
+                            {
+                                result = 0;
+                            }
+                        }
+                    }
+                }
 
-				amqpvalue_destroy(application_properties);
-			}
+                amqpvalue_destroy(application_properties);
+            }
 
-			message_destroy(message);
-		}
-	}
+            message_destroy(message);
+        }
+    }
+    return result;
+}
 
-	return result;
+void cbs_set_trace(CBS_HANDLE cbs, bool traceOn)
+{
+    if (cbs != NULL)
+    {
+        amqpmanagement_set_trace(cbs->amqp_management, traceOn);
+    }
 }