int Fibonacci::recursive_process(int calculate) { if(calculate < 2) return 1; else return recursive_process(calculate - 1) + recursive_process(calculate - 2); }
int udp_response_recursive_process (Context *cont) { switch (recursive_process (cont)) { case 0: /* continue, not ready yet */ return 0; case 1: /* finished with success */ return udp_response_finish (cont); default: /* we failed ourselves */ cont->mesg.hdr->rcode = RC_SERVERERR; return udp_response_finish (cont); } }
int tcp_response_recursive_process (Context *cont) { const char *fn = "tcp_response_recursive_process()"; syslog (LOG_DEBUG, "%s: start", fn); switch (recursive_process (cont)) { case 0: syslog (LOG_DEBUG, "%s: return, continue", fn); /* SUCCESS */ return 0; case 1: assemble_response (cont); if (cont->mesg_len < 0 || cont->mesg_len > MAX_STREAM) { syslog (LOG_WARNING, "response message too big"); return (response_abort (cont, 1)); } if (cont->tout) cont->tout->handler = NULL; if (context_timeout_register (cont, cont->timeout)) return (response_abort (cont, -1)); /* register output */ if (ev_tcp_out_register (cont->conn_sock, cont)) return (response_abort (cont, -1)); /* change the state */ cont->process = tcp_response_writing_process; cont->retry = tcp_response_writing_retry; cont->wp = NULL; syslog (LOG_DEBUG, "%s: return, finish", fn); /* SUCCESS */ return 0; default: return (response_abort (cont, -1)); } }