summaryrefslogtreecommitdiff
blob: 4b7fd209f9e4e305bd2e2f77eeb8ebf72567280a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
--- a/engine/tpcommon.c
+++ b/engine/tpcommon.c
@@ -37,6 +37,8 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdarg.h>
+#include <stdlib.h>
+#include <stddef.h>
 
 #ifdef UNIX
 #include <sys/time.h>
@@ -194,68 +196,76 @@ done:
 
 
 // Fill a tpStats structure with the contents from a STATS line
-int GetStatsFromLine(char *line, TPStats *s)
+int GetStatsFromLine(const char *line, TPStats *s)
 {
 	char valBuf[30];
+	char * stats_ptr = NULL;
 
 	if (strncmp(line, "STATS ", 6) != 0)
 		return -1;
-	memset(valBuf, 0, 30);
+	memset(valBuf, 0, sizeof(valBuf));
+	stats_ptr = ((char *)line)+6;
 
-	if (CopyTagField(valBuf, 29, line+6, "majorv"))
-		s->MajorVersion = atoi(valBuf);
-	if (CopyTagField(valBuf, 29, line+6, "minorv"))
-		s->MinorVersion = atoi(valBuf);
-	if (CopyTagField(valBuf, 29, line+6, "pktssent"))
-		s->PktsSent = atoi(valBuf);
-	if (CopyTagField(valBuf, 29, line+6, "pktsunsent"))
-		s->PktsUnSent = atoi(valBuf);
-	if (CopyTagField(valBuf, 29, line+6, "pktsrcvd"))
-		s->PktsRecvd = atoi(valBuf);
-	if (CopyTagField(valBuf, 29, line+6, "bytessent"))
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "majorv"))
+		s->MajorVersion = (USHORT) strtoul(valBuf,NULL,10);
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "minorv"))
+		s->MinorVersion = (USHORT) strtoul(valBuf,NULL,10);
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "pktssent"))
+		s->PktsSent = (UINT32) strtoul(valBuf,NULL,10);
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "pktsunsent"))
+		s->PktsUnSent = (UINT32) strtoul(valBuf,NULL,10);
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "pktsrcvd"))
+		s->PktsRecvd = (UINT32) strtoul(valBuf,NULL,10);
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "bytessent"))
 		sscanf(valBuf, "%" LONG_LONG_PREFIX "d", &(s->BytesSent));
-	if (CopyTagField(valBuf, 29, line+6, "bytesrcvd"))
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "bytesrcvd"))
 		sscanf(valBuf, "%" LONG_LONG_PREFIX "d", &(s->BytesRecvd));
-	if (CopyTagField(valBuf, 29, line+6, "maxrtt"))
-		s->MaxRoundtrip = atoi(valBuf);
-	if (CopyTagField(valBuf, 29, line+6, "minrtt"))
-		s->MinRoundtrip = atoi(valBuf);
-	if (CopyTagField(valBuf, 29, line+6, "oocount"))
-		s->ooCount = atoi(valBuf);
-
-	if (CopyTagField(valBuf, 29, line+6, "txstart_s"))
-		s->StartSend.tv_sec = atoi(valBuf);
-	if (CopyTagField(valBuf, 29, line+6, "txstart_us"))
-		s->StartSend.tv_usec = atoi(valBuf);
-
-	if (CopyTagField(valBuf, 29, line+6, "txstop_s"))
-		s->StopSend.tv_sec = atoi(valBuf);
-	if (CopyTagField(valBuf, 29, line+6, "txstop_us"))
-		s->StopSend.tv_usec = atoi(valBuf);
-
-	if (CopyTagField(valBuf, 29, line+6, "rxstart_s"))
-		s->StartRecv.tv_sec = atoi(valBuf);
-	if (CopyTagField(valBuf, 29, line+6, "rxstart_us"))
-		s->StartRecv.tv_usec = atoi(valBuf);
-
-	if (CopyTagField(valBuf, 29, line+6, "rxstop_s"))
-		s->StopRecv.tv_sec = atoi(valBuf);
-	if (CopyTagField(valBuf, 29, line+6, "rxstop_us"))
-		s->StopRecv.tv_usec = atoi(valBuf);
-
-	if (CopyTagField(valBuf, 29, line+6, "totrtt"))
-		s->TotalRoundtrip = atoi(valBuf);
-	if (CopyTagField(valBuf, 29, line+6, "nortt"))
-		s->nRoundtrips = atoi(valBuf);
-
-	if (CopyTagField(valBuf, 101, line + 6, "email"))
-		strcpy(s->email, valBuf);
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "maxrtt"))
+		s->MaxRoundtrip = (UINT32) strtoul(valBuf,NULL,10);
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "minrtt"))
+		s->MinRoundtrip = (UINT32) strtoul(valBuf,NULL,10);
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "oocount"))
+		s->ooCount = (UINT32) strtoul(valBuf,NULL,10);
+
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "txstart_s"))
+		s->StartSend.tv_sec = strtol(valBuf,NULL,10);
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "txstart_us"))
+		s->StartSend.tv_usec = strtol(valBuf,NULL,10);
+
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "txstop_s"))
+		s->StopSend.tv_sec = strtol(valBuf,NULL,10);
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "txstop_us"))
+		s->StopSend.tv_usec = strtol(valBuf,NULL,10);
+
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "rxstart_s"))
+		s->StartRecv.tv_sec = strtol(valBuf,NULL,10);
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "rxstart_us"))
+		s->StartRecv.tv_usec = strtol(valBuf,NULL,10);
+
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "rxstop_s"))
+		s->StopRecv.tv_sec = strtol(valBuf,NULL,10);
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "rxstop_us"))
+		s->StopRecv.tv_usec = strtol(valBuf,NULL,10);
+
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "totrtt"))
+		s->TotalRoundtrip = (UINT32) strtoul(valBuf,NULL,10);
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "nortt"))
+		s->nRoundtrips = (UINT32) strtoul(valBuf,NULL,10);
+
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "email"))
+	{
+		strncpy(s->email, valBuf, sizeof(s->email));
+		s->email[sizeof(s->email)-1] = '\0';
+	}
 
-	if (CopyTagField(valBuf, 101, line + 6, "pwd"))
-		strcpy(s->pwd, valBuf);
+	if (CopyTagField(valBuf, sizeof(valBuf)-1, stats_ptr, "pwd"))
+	{
+		strncpy(s->pwd, valBuf, sizeof(s->pwd));
+		s->pwd[sizeof(s->pwd)-1] = '\0';
+	}
 
+	stats_ptr = NULL;
 	return 0;
-
 }
 
 
--- a/engine/tpcommon.h
+++ b/engine/tpcommon.h
@@ -43,7 +43,7 @@ int SameTag(char *s1, char *s2);
 int CopyTagField(char *destp, int destSize, char *srcp, char *pname);
 int GetSessionFromLine(char *, TPEngine *);
 char * CreateSessionLine(TPEngine *, char *);
-int GetStatsFromLine(char *, TPStats *);
+int GetStatsFromLine(const char *, TPStats *);
 char * CreateLineFromStats(TPStats *, char *);
 int ReplyCode(char *);
 void TVAddUSec(struct timeval *, int);