+int error_h(conn_list_t *cl)
+{
+ int errno;
+ char *errorstring;
+cp
+ if(sscanf(cl->buffer, "%*d %d %as", &errno, &errorstring) != 2)
+ {
+ syslog(LOG_ERR, _("Got bad error from %s (%s)"), cl->id, cl->hostname);
+ return -1;
+ }
+
+ if(debug_lvl > DEBUG_error)
+ {
+ syslog(LOG_NOTICE, _("Error message from %s (%s): %s: %s"), cl->id, cl->hostname, error_text[errno], errorstring);
+ }
+
+cp
+ free(errorstring);
+ return 0;
+}
+
+int send_termreq(conn_list_t *cl)
+{
+}
+
+int termreq_h(conn_list_t *cl)
+{
+}
+
+/* Keepalive routines */
+
+int send_ping(conn_list_t *cl)
+{
+cp
+ return send_meta(cl, "%d", PING);
+}
+
+int ping_h(conn_list_t *cl)
+{
+}
+
+int send_pong(conn_list_t *cl)
+{
+cp
+ return send_meta(cl, "%d", PONG);
+}
+
+int pong_h(conn_list_t *cl)
+{
+}
+
+/* Key exchange */
+
+int send_req_key(conn_list_t *cl, conn_list_t *source)
+{
+cp
+ return send_meta(cl, "%d %s", REQ_KEY, source->id);
+}
+
+int req_key_h(conn_list_t *cl)
+{
+}
+
+int send_key(conn_list_t *cl)
+{
+}
+
+int key_h(conn_list_t *cl)
+{
+}
+
+
+
+