PERFORCE change 124332 for review
Garrett Cooper
gcooper at FreeBSD.org
Mon Jul 30 04:58:37 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=124332
Change 124332 by gcooper at optimus-revised_pkgtools on 2007/07/30 04:58:21
ipc items:
Filling in more blanks; renaming some functions and items to be more consistent and logical.
file/api.h:
Add some file stuff here.
Affected files ...
.. //depot/projects/soc2007/revised_fbsd_pkgtools/v2/lib/file/api.h#1 add
.. //depot/projects/soc2007/revised_fbsd_pkgtools/v2/lib/ipc/api.c#3 edit
.. //depot/projects/soc2007/revised_fbsd_pkgtools/v2/lib/ipc/api.h#5 edit
.. //depot/projects/soc2007/revised_fbsd_pkgtools/v2/lib/ipc/client.c#3 edit
.. //depot/projects/soc2007/revised_fbsd_pkgtools/v2/lib/ipc/server.c#3 edit
Differences ...
==== //depot/projects/soc2007/revised_fbsd_pkgtools/v2/lib/ipc/api.c#3 (text+ko) ====
@@ -1,7 +1,7 @@
#include "lib/ipc/api.h"
ipc_info_t *
-parse_ipc_message(char header)
+message_to_ipc(char header)
{
ipc_info_t *ipc_info = calloc(1, sizeof(ipc_info_t));
@@ -22,6 +22,7 @@
ipc_info->valid = ( !(header | IPC_MSG_IS_DEPORIGIN) &&
(!(header | IPC_MSG_UPDATE) || ( (header | IPC_MSG_UPDATE) && ipc_info->remove_entry )) );
ipc_info->remove_entry = (header | IPC_MSG_REMOVE_ENTRY);
+ ipc_info->file_entry =
break;
/**
@@ -38,3 +39,27 @@
return ipc_info;
}
+
+char
+ipc_to_message(ipc_info_t *ipc_info)
+{
+
+ char header;
+
+ header = (ipc_info->message_type << IPC_MSG_TYPE_SHIFT);
+
+ if(ipc_info->remove_entry)
+ header += IPC_MSG_REMOVE_ENTRY;
+
+ if(ipc_info->file_info->exists) {
+
+ if(ipc_info->file_info->valid_checksum)
+ header += IPC_MSG_VALID_CHECKSUM;
+
+ header += IPC_MSG_FILE_EXISTS;
+
+ }
+
+ return header;
+
+}
==== //depot/projects/soc2007/revised_fbsd_pkgtools/v2/lib/ipc/api.h#5 (text+ko) ====
@@ -1,6 +1,12 @@
-#ifndef __API_H
+#ifndef __IPC_API_H
+
+#define __IPC_API_H
+
+#include "lib/file/api.h"
+
+#define SEND(SOCK, MSG) send(SOCK, MSG, sizeof(MSG))
-#define __API_H
+#define RECV(SOCK, MSG) recv(SOCK, MSG, sizeof(MSG))
typedef enum {
NULL_TYPE = 0,
@@ -10,10 +16,17 @@
} message_type_e;
typedef struct {
+ char path[FILENAME_MAX+1];
+ char checksum[MAX_CHECKSUM_LENGTH+1];
+ int exists;
+ int checksum_matches;
+} file_info_t;
+
+typedef struct {
+ int remove_entry;
+ int valid;
message_type_e message_type;
- int valid;
- int remove_entry;
- int meta;
+ file_info_t file_info;
} ipc_info_t;
/**
@@ -24,8 +37,8 @@
* 2 Update
* 3 Remove
* 4 Origin type
- * 5 Valid file
- * 6 Valid checksum
+ * 5 Checksum
+ * 6 File exists
*
* ===================================================
* Category | Value | Meaning
@@ -43,19 +56,20 @@
* completely remove entry
* from database.
* For package entries,
- * set status to deinstalled
- * | 0 | Do nothing (.
+ * set status to 'not
+ * installed'.
+ * | 0 | Do nothing.
* ===================================================
* Origin type | 1 | Origin.
* | 0 | Deporigin.
* ===================================================
- * Valid file | 1 | File exists in its
- * respective spot.
- * | 0 | File doesn't exist.
+ * File exists | 1 | (Self-explanatory)
+ * File doesn't | 0 |
+ * exist
* ===================================================
- * Valid | 1 | Calculated checksum
- * checksum matches.
- * | 0 | Checksum didn't match.
+ * Valid | 1 | Checksum passes.
+ * checksum
+ * Bad checksum | 0 | Checksum failed.
*
*/
@@ -74,13 +88,14 @@
#define IPC_MSG_IS_DEPORIGIN (1 << 3)
-#define IPC_MSG_VALID_FILE (1 << 2)
+#define IPC_MSG_FILE_EXISTS (1 << 2)
#define IPC_MSG_VALID_CHECKSUM (1 << 1)
#define IPC_VALID_MESSAGE 0
#define IPC_INVALID_MESSAGE 1
-ipc_info_t* parse_ipc_message(char);
+ipc_info_t* message_to_ipc(char);
+char ipc_to_message(ipc_info_t*);
#endif
==== //depot/projects/soc2007/revised_fbsd_pkgtools/v2/lib/ipc/client.c#3 (text+ko) ====
@@ -6,6 +6,8 @@
char *data_payload = (msg+1);
+ RECV(sock, msg);
+
ipc_info = parse_ipc_message(*msg);
if(ipc_info->valid) {
@@ -19,15 +21,12 @@
}
int
-client_service_ipc_send(int sock, ipc_info_t ipc_info, char *msg)
+client_service_ipc_send(int sock, ipc_info_t *ipc_info, char *msg)
{
- if(ipc_info->valid) {
+ *msg = ipc_to_msg(ipc_info);
-// ipc_info->valid = 0;
-
- }
-
- return (int) send(sock, req_string, sizeof(msg), MSG_OOB | MSG_EOF | MSG_NOSIGNAL);
+ if(SEND(sock, msg) < 0)
+ return -1;
}
==== //depot/projects/soc2007/revised_fbsd_pkgtools/v2/lib/ipc/server.c#3 (text+ko) ====
@@ -6,7 +6,9 @@
char *data_payload = (msg+1);
- ipc_info = parse_ipc_message(*msg);
+ RECV(sock, msg);
+
+ ipc_info = message_to_ipc(*msg);
if(ipc_info->valid) {
@@ -19,15 +21,12 @@
}
int
-server_service_ipc_send(int sock, ipc_info_t ipc_info, char *msg)
+server_service_ipc_send(int sock, ipc_info_t *ipc_info, char *msg)
{
- if(ipc_info->valid) {
+ *msg = ipc_to_message(ipc_info);
-// ipc_info->valid = 0;
-
- }
-
- return (int) send(sock, req_string, sizeof(msg), MSG_OOB | MSG_EOF | MSG_NOSIGNAL);
+ if(SEND(sock, msg) < 0)
+ return -1;
}
More information about the p4-projects
mailing list