aboutsummaryrefslogtreecommitdiffstats
path: root/sgsnemu
diff options
context:
space:
mode:
authorjjako <jjako>2003-04-11 09:43:22 +0000
committerjjako <jjako>2003-04-11 09:43:22 +0000
commita760e322fe5ccbbfe7d49140185fb6dd3463a696 (patch)
tree482237956f34bed296e87426ef8a25f2408c352c /sgsnemu
parenta7cd249501b869ed518746b301eb92230ec50f50 (diff)
added syserr.h and syserr.c
Diffstat (limited to 'sgsnemu')
-rw-r--r--sgsnemu/syserr.c76
-rw-r--r--sgsnemu/syserr.h26
2 files changed, 102 insertions, 0 deletions
diff --git a/sgsnemu/syserr.c b/sgsnemu/syserr.c
new file mode 100644
index 0000000..9d793e0
--- /dev/null
+++ b/sgsnemu/syserr.c
@@ -0,0 +1,76 @@
+/*
+ * Syslog functions.
+ * Copyright (C) 2003 Mondru AB.
+ *
+ * The contents of this file may be used under the terms of the GNU
+ * General Public License Version 2, provided that the above copyright
+ * notice and this permission notice is included in all copies or
+ * substantial portions of the software.
+ *
+ * The initial developer of the original code is
+ * Jens Jakobsen <jj@openggsn.org>
+ *
+ * Contributor(s):
+ *
+ */
+
+#include <stdarg.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <stdio.h>
+#include <syslog.h>
+#include <string.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include "syserr.h"
+
+
+void sys_err(int pri, char *fn, int ln, int en, char *fmt, ...) {
+ va_list args;
+ char buf[SYSERR_MSGSIZE];
+
+ va_start(args, fmt);
+ vsnprintf(buf, SYSERR_MSGSIZE, fmt, args);
+ va_end(args);
+ buf[SYSERR_MSGSIZE-1] = 0; /* Make sure it is null terminated */
+ if (en)
+ syslog(pri, "%s: %d: %d (%s) %s", fn, ln, en, strerror(en), buf);
+ else
+ syslog(pri, "%s: %d: %s", fn, ln, buf);
+}
+
+void sys_errpack(int pri, char *fn, int ln, int en, struct sockaddr_in *peer,
+ void *pack, unsigned len, char *fmt, ...) {
+
+ va_list args;
+ char buf[SYSERR_MSGSIZE];
+ char buf2[SYSERR_MSGSIZE];
+ int n;
+ int pos;
+
+ va_start(args, fmt);
+ vsnprintf(buf, SYSERR_MSGSIZE, fmt, args);
+ va_end(args);
+ buf[SYSERR_MSGSIZE-1] = 0;
+
+ snprintf(buf2, SYSERR_MSGSIZE, "Packet from %s:%u, length: %d, content:",
+ inet_ntoa(peer->sin_addr),
+ ntohs(peer->sin_port),
+ len);
+ buf2[SYSERR_MSGSIZE-1] = 0;
+ pos = strlen(buf2);
+ for(n=0; n<len; n++) {
+ if ((pos+4)<SYSERR_MSGSIZE) {
+ sprintf((buf2+pos), " %02hhx", ((unsigned char*)pack)[n]);
+ pos += 3;
+ }
+ }
+ buf2[pos] = 0;
+
+ if (en)
+ syslog(pri, "%s: %d: %d (%s) %s. %s", fn, ln, en, strerror(en), buf, buf2);
+ else
+ syslog(pri, "%s: %d: %s. %s", fn, ln, buf, buf2);
+
+}
diff --git a/sgsnemu/syserr.h b/sgsnemu/syserr.h
new file mode 100644
index 0000000..ae07848
--- /dev/null
+++ b/sgsnemu/syserr.h
@@ -0,0 +1,26 @@
+/*
+ * Syslog functions.
+ * Copyright (C) 2003 Mondru AB.
+ *
+ * The contents of this file may be used under the terms of the GNU
+ * General Public License Version 2, provided that the above copyright
+ * notice and this permission notice is included in all copies or
+ * substantial portions of the software.
+ *
+ * The initial developer of the original code is
+ * Jens Jakobsen <jj@openggsn.org>
+ *
+ * Contributor(s):
+ *
+ */
+
+#ifndef _SYSERR_H
+#define _SYSERR_H
+
+#define SYSERR_MSGSIZE 256
+
+void sys_err(int pri, char *filename, int en, int line, char *fmt, ...);
+void sys_errpack(int pri, char *fn, int ln, int en, struct sockaddr_in *peer,
+ void *pack, unsigned len, char *fmt, ...);
+
+#endif /* !_SYSERR_H */