text and html modules.
while (size > 0) {
n = re_stream_exec(sr, buf, size);
if (re_stream_result(sr) == 1) {
- /* TODO: callback (module param) or next stage */
+ char *url = re_stream_getresult(sr);
+ if (m->callback)
+ m->callback(m, url, m->call_data);
}
size -= n;
buf += n;
m->mp_mod = mod;
m->mp_prev = parent;
m->mp_next = NULL;
- if (parent) parent->mp_next = m;
+ if (parent) {
+ parent->mp_next = m;
+ m->callback = parent->callback;
+ m->call_data = parent->call_data;
+ }
}
return m;
}
}
}
+void
+msgproc_setcallback(msgproc *m, msgproc_callback cb, void *call_data)
+{
+ if (m) {
+ m->callback = cb;
+ m->call_data = call_data;
+ }
+}
+
void
msgproc_setpriv(msgproc *m, void *data)
{
void (*mpm_shutdown)(void);
} msgproc_module;
+typedef void (*msgproc_callback)(msgproc *, char *, void *);
struct _msgproc_s {
void *mp_priv;
msgproc_module *mp_mod;
msgproc *mp_prev, *mp_next;
+ msgproc_callback callback;
+ void *call_data;
};
msgproc *msgproc_create(msgproc *, msgproc_module *);
void msgproc_free(msgproc *);
+void msgproc_setcallback(msgproc *, msgproc_callback, void *);
void msgproc_setpriv(msgproc *, void *);
void *msgproc_getpriv(msgproc *);
msgproc *msgproc_next(msgproc *);
while (size > 0) {
n = re_stream_exec(sr, buf, size);
if (re_stream_result(sr) == 1) {
- /* TODO: callback (supplied by set module param?)
- or next stage */
+ char *url = re_stream_getresult(sr);
+ if (m->callback) {
+ m->callback(m, url, m->call_data);
+ }
+
}
size -= n;
buf += n;