PERFORCE change 122632 for review

Andrew Turner andrew at FreeBSD.org
Sun Jul 1 10:41:29 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=122632

Change 122632 by andrew at andrew_hermies on 2007/07/01 10:41:23

	Start to give the error responses a number based on their type
	Use the new facund_response_code in facund_response_new
	Add facund_response_set_id to set the id of the call this response is for
	Handle the case when the response has no id set

Affected files ...

.. //depot/projects/soc2007/andrew-update/lib/facund_response.c#2 edit
.. //depot/projects/soc2007/andrew-update/lib/facund_response.h#2 edit

Differences ...

==== //depot/projects/soc2007/andrew-update/lib/facund_response.c#2 (text+ko) ====

@@ -35,7 +35,7 @@
 
 struct facund_response {
 	char	*resp_id;	/* The id of the call */
-	int	 resp_code;	/* The return code of the response.
+	facund_response_code resp_code;	/* The return code of the response.
 				 * 0=good, not 0=bad */
 	char	*resp_msg;	/* The error message or NULL
 				 * for the default */
@@ -48,8 +48,8 @@
  * Creates a new response object to send to the client
  */
 struct facund_response *
-facund_response_new(const char *id, int code, const char *message,
-    struct facund_object *obj)
+facund_response_new(const char *id, facund_response_code code,
+    const char *message, struct facund_object *obj)
 {
 	struct facund_response *resp;
 
@@ -57,7 +57,9 @@
 	if (resp == NULL)
 		return NULL;
 
-	resp->resp_id = strdup(id);
+	if (id != NULL) {
+		resp->resp_id = strdup(id);
+	}
 	resp->resp_code = code;
 	resp->resp_msg = strdup(message);
 	resp->resp_return = obj;
@@ -69,6 +71,16 @@
 	return resp;
 }
 
+int
+facund_response_set_id(struct facund_response *resp, const char *id)
+{
+	if (resp == NULL || id == NULL) {
+		return -1;
+	}
+
+	return -1;
+}
+
 /*
  * Gets a string to send to the client
  */
@@ -80,11 +92,22 @@
 
 	if (resp->resp_string == NULL) {
 		const char *data;
+		char *str;
 
 		data = facund_object_xml_string(resp->resp_return);
-		asprintf(&resp->resp_string, "<response id=\"%s\" code=\"%d\" "
-		    "message=\"%s\">%s</response>", resp->resp_id,
-		    resp->resp_code, resp->resp_msg, (data != NULL ? data :""));
+		asprintf(&resp->resp_string, "<response");
+		
+		if (resp->resp_id != NULL) {
+			str = resp->resp_string;
+			asprintf(&resp->resp_string, "%s id=\"%s\"", str,
+			    resp->resp_id);
+			free(str);
+		}
+		str = resp->resp_string;
+		asprintf(&resp->resp_string, "%s code=\"%d\" message=\"%s\">"
+		    "%s</response>", str, resp->resp_code, resp->resp_msg,
+		    (data != NULL ? data :""));
+		free(str);
 	}
 	return resp->resp_string;
 }

==== //depot/projects/soc2007/andrew-update/lib/facund_response.h#2 (text+ko) ====

@@ -28,11 +28,31 @@
 #ifndef FACUND_RESPONSE_H
 #define FACUND_RESPONSE_H
 
+typedef enum _facund_response_code {
+	RESP_GOOD = 0,
+
+	RESP_UNKNOWN_ELEMENT = 100,	/* The element is unknown */
+	RESP_WRONG_CHILD_ELEMENT,	/* The element can't be here */
+
+	RESP_UNKNOWN_ATTRIBUTE = 200,
+	RESP_NO_ATTRIBUTE,
+	RESP_REPEATED_ATTRIBUTE,
+
+	RESP_UNKNOWN_CALL = 300,	/* There is no call with this name */
+
+	/* These are used in the data elements */
+	RESP_EMPTY_VALUE = 400,		/* The data had no value */
+	RESP_INCORECT_DATA,		/* The data has incorrectly
+					 * formatted data */
+} facund_response_code;
+
 struct facund_response;
 struct facund_object;
 
-struct facund_response	*facund_response_new(const char *, int, const char *,
-			    struct facund_object *);
+struct facund_response	*facund_response_new(const char *, facund_response_code,
+			    const char *, struct facund_object *);
+int			 facund_response_set_id(struct facund_response *,
+			    const char *);
 const char		*facund_response_string(struct facund_response *);
 void			 facund_response_free(struct facund_response *);
 


More information about the p4-projects mailing list