#ifndef IL_MSG_H
#define IL_MSG_H
+#include "il_string.h"
+
#ident "$Header$"
/*
*
*/
-int encode_il_msg(char **, const char *);
+int encode_il_msg(char **, const il_octet_string_t *);
int encode_il_reply(char **, int, int, const char *);
-int decode_il_msg(char **, const char *);
+int decode_il_msg(il_octet_string_t *, const char *);
int decode_il_reply(int *, int *, char **, const char *);
int read_il_data(void *user_data,
char **buffer,
int (*reader)(void *user_data, char *buffer, const int));
+enum {
+ LB_OK = 0,
+ LB_NOMEM = 200,
+ LB_PROTO = 400,
+ LB_AUTH = 500,
+ LB_PERM = 600,
+ LB_DBERR = 700,
+ LB_SYS = 800,
+ LB_TIME = 900
+};
+
#endif
#ident "$Header$"
-#define MAXLEN 1024
+typedef struct il_octet_string {
+ int len;
+ char *data;
+} il_octet_string_t;
char *put_int(char *p, int d);
char *_put_int(char *p, int d);
-char *put_string(char *p, char *s);
+char *put_string(char *p, il_octet_string_t *s);
char *get_int(char *p, int *d);
char *_get_int(char *p, int *d);
-char *get_string(char *p, char **s);
+char *get_string(char *p, il_octet_string_t *s);
-int len_string(char *s);
+int len_string(il_octet_string_t *s);
int len_int(int d);
-enum {
- LB_OK = 0,
- LB_NOMEM = 200,
- LB_PROTO = 400,
- LB_AUTH = 500,
- LB_PERM = 600,
- LB_DBERR = 700,
- LB_SYS = 800,
- LB_TIME = 900
-};
-
#endif
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
#define IL_PROTOCOL_MAGIC_WORD "michal"
int
-encode_il_msg(char **buffer, const char *event)
+encode_il_msg(char **buffer, const il_octet_string_t *event)
{
int len;
char *p;
- char *protocol_magic_word = IL_PROTOCOL_MAGIC_WORD;
-
+ il_octet_string_t protocol_magic_word;
+
+ protocol_magic_word.data = IL_PROTOCOL_MAGIC_WORD;
+ protocol_magic_word.len = strlen(IL_PROTOCOL_MAGIC_WORD);
/* allocate enough room to hold the message */
- len = 17 + len_string(protocol_magic_word) + len_string((char*)event);
+ len = 17 + len_string(&protocol_magic_word) + len_string((il_octet_string_t*)event);
if((*buffer = malloc(len)) == NULL) {
return(-1);
}
p += 17;
/* write rest of the message */
- p = put_string(p, protocol_magic_word);
- p = put_string(p, (char*)event);
+ p = put_string(p, &protocol_magic_word);
+ p = put_string(p, (il_octet_string_t*)event);
return(p - *buffer);
}
{
int len;
char *p;
+ il_octet_string_t emsg;
- len = 17 + len_int(err_code) + len_int(err_code_min) + len_string((char*)err_msg);
+ emsg.data = (char*)err_msg;
+ emsg.len = strlen(err_msg);
+ len = 17 + len_int(err_code) + len_int(err_code_min) + len_string(&emsg);
if((*buffer = malloc(len)) == NULL) {
return(-1);
}
p = *buffer + 17;
p = put_int(p, err_code);
p = put_int(p, err_code_min);
- p = put_string(p, (char*)err_msg);
+ p = put_string(p, &emsg);
return(p - *buffer);
}
int
-decode_il_msg(char **event, const char *buf)
+decode_il_msg(il_octet_string_t *event, const char *buf)
{
char *p;
- char *protocol_magic_word=NULL;
+ il_octet_string_t protocol_magic_word;
int magic_word_check_failed = 0;
+ assert( event != NULL );
+
/* First check that the protocol 'magic' word is there */
p = get_string((char*)buf, &protocol_magic_word);
- if (protocol_magic_word) {
- if (strcmp (protocol_magic_word, IL_PROTOCOL_MAGIC_WORD) != 0) {
+ if (protocol_magic_word.data) {
+ if (strcmp (protocol_magic_word.data, IL_PROTOCOL_MAGIC_WORD) != 0) {
magic_word_check_failed = 1;
}
- free(protocol_magic_word);
+ free(protocol_magic_word.data);
}
if (magic_word_check_failed != 0) return (-1);
p = get_string(p, event);
if(p == NULL) {
- if(*event) { free(*event); *event = NULL; };
+ if(event->data) { free(event->data); event->data = NULL; };
return(-1);
}
return(p - buf);
int
decode_il_reply(int *maj, int *min, char **err, const char * buf)
{
- char *p = buf;
+ char *p = (char*)buf;
+ il_octet_string_t e;
p = get_int(p, maj);
if(p == NULL) return(-1);
p = get_int(p, min);
if(p == NULL) return(-1);
- p = get_string(p, err);
+ p = get_string(p, &e);
if(p == NULL) {
- if(*err) { free(*err); *err = NULL; };
+ if(e.data) { free(e.data); e.data = NULL; };
return(-1);
}
+ *err = e.data;
return(p - buf);
}
#include "il_string.h"
char *
-put_string(char *p, char *s)
+put_string(char *p, il_octet_string_t *s)
{
- int len = strlen(s);
-
assert( p != NULL );
+ assert( s != NULL );
- p = _put_int(p, len);
+ p = _put_int(p, s->len);
*p++ = ' ';
- strncpy(p, s, len);
- p += len;
+ /* strncpy(p, s->data, s->len); */
+ memcpy(p, s->data, s->len);
+ p += s->len;
*p++ = '\n';
return(p);
}
int
-len_string(char *s)
+len_string(il_octet_string_t *s)
{
- int len, slen;
+ int len;
assert( s != NULL );
- slen = strlen(s);
- len = len_int(slen);
-
- return(len + slen + 1);
+ len = len_int(s->len);
+ return(len + s->len + 1);
}
char *
-get_string(char *p, char **s)
+get_string(char *p, il_octet_string_t *s)
{
int len;
assert( p != NULL );
+ assert( s != NULL );
- *s = NULL;
+ s->data = NULL;
p = _get_int(p, &len);
if(*p != ' ')
return(NULL);
else
{
- *s = malloc(len + 1);
- if(*s == NULL)
+ s->data = malloc(len + 1);
+ if(s->data == NULL)
return(NULL);
- strncpy(*s, ++p, len);
- (*s)[len] = '\0';
+ /* strncpy(s->data, ++p, len); */
+ memcpy(s->data, ++p, len);
+ (s->data)[len] = '\0';
p += len;
return( *p++ == '\n' ? p : NULL );
}
#define BUFFSZ 1024
+/*
+ * strnstr - look only in first n characters
+ * (taken from NSPR)
+ */
+static
+char *
+_strnstr(const char *big, const char *little, size_t max)
+{
+ size_t ll;
+
+ if( ((const char *)0 == big) || ((const char *)0 == little) ) return (char *)0;
+ if( ((char)0 == *big) || ((char)0 == *little) ) return (char *)0;
+
+ ll = strlen(little);
+ if( ll > (size_t)max ) return (char *)0;
+ max -= ll;
+ max++;
+
+ for( ; max && *big; big++, max-- )
+ if( *little == *big )
+ if( 0 == strncmp(big, little, ll) )
+ return (char *)big;
+
+ return (char *)0;
+}
+
+
/*
* reading lines (pasted from load.c)
*/
gettimeofday(&endtime, NULL);
/* check for the termination event */
- if(strstr(event_string, termination_string) != NULL) {
+ /* if it is not in the first 1k chars, it is not there */
+ if(_strnstr(event_string, termination_string, 1024) != NULL) {
/* print the timestamp */
fprintf(stderr, "PERFTEST_END_TIMESTAMP=%lu.%06lu\n",
(unsigned long)endtime.tv_sec,(unsigned long)endtime.tv_usec);
glite_wll_perftest_consumeEventIlMsg(const char *msg)
{
int ret = 0;
- char *event;
+ il_octet_string_t event;
assert(msg != NULL);
}
/* check for the termination event */
- if(strstr(event, termination_string) != NULL) {
+ if(_strnstr(event.data, termination_string, 1024) != NULL) {
/* print the timestamp */
fprintf(stderr, "PERFTEST_END_TIMESTAMP=%lu.%06lu\n",
endtime.tv_sec, endtime.tv_usec);
if(pthread_mutex_unlock(&perftest_lock) < 0)
abort();
- free(event);
+ free(event.data);
return(ret);
}
if [[ $linesbefore -eq $linesafter ]]
then
echo "Test failed - consumer did not report timestamp."
+ PERFTEST_THROUGHPUT[$i]=0
+ PERFTEST_EV_THROUGHPUT[$i]=0
else
get_result
[[ $DEBUG -gt 0 ]] && echo Result: $PERFTEST_DAY_JOB_THROUGHPUT
PERFTEST_THROUGHPUT[$i]=$PERFTEST_DAY_JOB_THROUGHPUT
- PERFTEST_EVENT_THROUGHPUT[$i]=$PERFTEST_EVENT_THROUGHPUT
+ PERFTEST_EV_THROUGHPUT[$i]=$PERFTEST_EVENT_THROUGHPUT
fi
i=$(($i + 1))
done
#include <unistd.h>
extern "C" {
+#include <string.h>
#include "il_string.h"
#include "il_msg.h"
}
public:
void setUp() {
- len_msg = encode_il_msg(&buffer_msg, "zprava");
+ il_octet_string_t s;
+
+ s.data = "zprava";
+ s.len = strlen(s.data);
+ len_msg = encode_il_msg(&buffer_msg, &s);
len_rep = encode_il_reply(&buffer_rep, 10, 20, "chyba");
}
}
void testDecodeMsg() {
- char *s;
+ il_octet_string_t s;
int l;
l = decode_il_msg(&s, buffer_msg + 17);
CPPUNIT_ASSERT_EQUAL(l, len_msg - 17);
- CPPUNIT_ASSERT(s != NULL);
- CPPUNIT_ASSERT( !strcmp(s, "zprava") );
- free(s);
+ CPPUNIT_ASSERT(s.data != NULL);
+ CPPUNIT_ASSERT( !strcmp(s.data, "zprava") );
+ free(s.data);
}
void testEncodeReply() {
#include <cppunit/extensions/HelperMacros.h>
extern "C" {
+#include <string.h>
#include "il_string.h"
}
}
void testPutString() {
- put_string(buffer, "ahoj");
+ il_octet_string_t s;
+ s.data = "ahoj";
+ s.len = strlen(s.data);
+ put_string(buffer, &s);
CPPUNIT_ASSERT( !strncmp(buffer,"4 ahoj\n",7) );
}
void testGetString() {
- char *s;
+ il_octet_string_t s;
get_string("4 ahoj\n", &s);
- CPPUNIT_ASSERT( s != NULL );
- CPPUNIT_ASSERT( !strcmp(s, "ahoj") );
- CPPUNIT_ASSERT( s[4] == 0 );
- free(s);
+ CPPUNIT_ASSERT( s.data != NULL );
+ CPPUNIT_ASSERT( !strcmp(s.data, "ahoj") );
+ CPPUNIT_ASSERT( s.data[4] == 0 );
+ free(s.data);
}
void testLenString() {
- int d = len_string("ahoj");
+ il_octet_string_t s;
+ int d;
+
+ s.data = "ahoj";
+ s.len = strlen(s.data);
+ d = len_string(&s);
CPPUNIT_ASSERT( d == 7);
}