@@ -22,83 +22,83 @@ lua_check_consumer_msg(struct lua_State *L, int index) {
22
22
int
23
23
lua_consumer_msg_topic (struct lua_State * L ) {
24
24
msg_t * msg = lua_check_consumer_msg (L , 1 );
25
- lua_pushstring (L , rd_kafka_topic_name (msg -> rd_message -> rkt ));
25
+ lua_pushstring (L , rd_kafka_topic_name (msg -> topic ));
26
26
return 1 ;
27
27
}
28
28
29
29
int
30
30
lua_consumer_msg_partition (struct lua_State * L ) {
31
31
msg_t * msg = lua_check_consumer_msg (L , 1 );
32
32
33
- lua_pushnumber (L , (double )msg -> rd_message -> partition );
33
+ lua_pushnumber (L , (double )msg -> partition );
34
34
return 1 ;
35
35
}
36
36
37
37
int
38
38
lua_consumer_msg_offset (struct lua_State * L ) {
39
39
msg_t * msg = lua_check_consumer_msg (L , 1 );
40
40
41
- luaL_pushint64 (L , msg -> rd_message -> offset );
41
+ luaL_pushint64 (L , msg -> offset );
42
42
return 1 ;
43
43
}
44
44
45
45
int
46
46
lua_consumer_msg_key (struct lua_State * L ) {
47
47
msg_t * msg = lua_check_consumer_msg (L , 1 );
48
48
49
- if (msg -> rd_message -> key_len <= 0 || msg -> rd_message -> key == NULL || ((char * )msg -> rd_message -> key ) == NULL ) {
49
+ if (msg -> key_len <= 0 || msg -> key == NULL || ((char * )msg -> key ) == NULL ) {
50
50
return 0 ;
51
51
}
52
52
53
- lua_pushlstring (L , ( char * ) msg -> rd_message -> key , msg -> rd_message -> key_len );
53
+ lua_pushlstring (L , msg -> key , msg -> key_len );
54
54
return 1 ;
55
55
}
56
56
57
57
int
58
58
lua_consumer_msg_value (struct lua_State * L ) {
59
59
msg_t * msg = lua_check_consumer_msg (L , 1 );
60
60
61
- if (msg -> rd_message -> len <= 0 || msg -> rd_message -> payload == NULL || ((char * )msg -> rd_message -> payload ) == NULL ) {
61
+ if (msg -> value_len <= 0 || msg -> value == NULL || ((char * )msg -> value ) == NULL ) {
62
62
return 0 ;
63
63
}
64
64
65
- lua_pushlstring (L , ( char * ) msg -> rd_message -> payload , msg -> rd_message -> len );
65
+ lua_pushlstring (L , msg -> value , msg -> value_len );
66
66
return 1 ;
67
67
}
68
68
69
69
int
70
70
lua_consumer_msg_tostring (struct lua_State * L ) {
71
71
msg_t * msg = lua_check_consumer_msg (L , 1 );
72
72
73
- size_t key_len = msg -> rd_message -> key_len <= 0 ? 5 : msg -> rd_message -> key_len + 1 ;
73
+ size_t key_len = msg -> key_len <= 0 ? 5 : msg -> key_len + 1 ;
74
74
char key [key_len ];
75
75
76
- if (msg -> rd_message -> key_len <= 0 || msg -> rd_message -> key == NULL || ((char * )msg -> rd_message -> key ) == NULL ) {
76
+ if (msg -> key_len <= 0 || msg -> key == NULL || ((char * )msg -> key ) == NULL ) {
77
77
strncpy (key , "NULL" , 5 );
78
78
} else {
79
- strncpy (key , msg -> rd_message -> key , msg -> rd_message -> key_len + 1 );
80
- if (key [msg -> rd_message -> key_len ] != '\0' ) {
81
- key [msg -> rd_message -> key_len ] = '\0' ;
79
+ strncpy (key , msg -> key , msg -> key_len + 1 );
80
+ if (key [msg -> key_len ] != '\0' ) {
81
+ key [msg -> key_len ] = '\0' ;
82
82
}
83
83
}
84
84
85
- size_t value_len = msg -> rd_message -> len <= 0 ? 5 : msg -> rd_message -> len + 1 ;
85
+ size_t value_len = msg -> value_len <= 0 ? 5 : msg -> value_len + 1 ;
86
86
char value [value_len ];
87
87
88
- if (msg -> rd_message -> len <= 0 || msg -> rd_message -> payload == NULL || ((char * )msg -> rd_message -> payload ) == NULL ) {
88
+ if (msg -> value_len <= 0 || msg -> value == NULL || ((char * )msg -> value ) == NULL ) {
89
89
strncpy (value , "NULL" , 5 );
90
90
} else {
91
- strncpy (value , msg -> rd_message -> payload , msg -> rd_message -> len + 1 );
92
- if (value [msg -> rd_message -> len ] != '\0' ) {
93
- value [msg -> rd_message -> len ] = '\0' ;
91
+ strncpy (value , msg -> value , msg -> value_len + 1 );
92
+ if (value [msg -> value_len ] != '\0' ) {
93
+ value [msg -> value_len ] = '\0' ;
94
94
}
95
95
}
96
96
97
97
lua_pushfstring (L ,
98
98
"Kafka Consumer Message: topic=%s partition=%d offset=%d key=%s value=%s" ,
99
- rd_kafka_topic_name (msg -> rd_message -> rkt ),
100
- msg -> rd_message -> partition ,
101
- msg -> rd_message -> offset ,
99
+ rd_kafka_topic_name (msg -> topic ),
100
+ msg -> partition ,
101
+ msg -> offset ,
102
102
key ,
103
103
value );
104
104
return 1 ;
@@ -108,13 +108,55 @@ int
108
108
lua_consumer_msg_gc (struct lua_State * L ) {
109
109
msg_t * * msg_p = (msg_t * * )luaL_checkudata (L , 1 , consumer_msg_label );
110
110
if (msg_p && * msg_p ) {
111
- if ((* msg_p )-> rd_message != NULL ) {
112
- rd_kafka_message_destroy ((* msg_p )-> rd_message );
113
- }
114
- free (* msg_p );
111
+ destroy_consumer_msg (* msg_p );
115
112
}
116
113
if (msg_p )
117
114
* msg_p = NULL ;
118
115
119
116
return 0 ;
117
+ }
118
+
119
+ msg_t *
120
+ new_consumer_msg (rd_kafka_message_t * rd_message ) {
121
+ msg_t * msg ;
122
+ msg = malloc (sizeof (msg_t ));
123
+ msg -> topic = rd_message -> rkt ;
124
+ msg -> partition = rd_message -> partition ;
125
+
126
+ // value
127
+ if (rd_message -> len > 0 ) {
128
+ msg -> value = malloc (rd_message -> len );
129
+ memcpy (msg -> value , rd_message -> payload , rd_message -> len );
130
+ }
131
+ msg -> value_len = rd_message -> len ;
132
+
133
+ // key
134
+ if (rd_message -> key_len > 0 ) {
135
+ msg -> key = malloc (rd_message -> key_len );
136
+ memcpy (msg -> key , rd_message -> key , rd_message -> key_len );
137
+ }
138
+ msg -> key_len = rd_message -> key_len ;
139
+
140
+ msg -> offset = rd_message -> offset ;
141
+
142
+ return msg ;
143
+ }
144
+
145
+ void
146
+ destroy_consumer_msg (msg_t * msg ) {
147
+ if (msg == NULL ) {
148
+ return ;
149
+ }
150
+
151
+ if (msg -> key != NULL ) {
152
+ free (msg -> key );
153
+ }
154
+
155
+ if (msg -> value != NULL ) {
156
+ free (msg -> value );
157
+ }
158
+
159
+ free (msg );
160
+
161
+ return ;
120
162
}
0 commit comments