blob: e8cc191b9aa73254cf3286e11832ea282d54089b [file] [log] [blame]
Jeff Thompsonb982b6d2013-07-15 18:15:45 -07001/**
2 * @author: Jeff Thompson
3 * This is a port of py from PyCCN, written by:
4 * Derek Kulinski <takeda@takeda.tk>
5 * Jeff Burke <jburke@ucla.edu>
6 *
7 * See COPYING for copyright and distribution information.
8 */
9
10#ifndef NDN_CLOSURE_HPP
Jeff Thompson2d27e2f2013-08-09 12:55:00 -070011#define NDN_CLOSURE_HPP
Jeff Thompsonb982b6d2013-07-15 18:15:45 -070012
Jeff Thompson285e63b2013-08-05 10:43:30 -070013#include "common.hpp"
Jeff Thompsonb982b6d2013-07-15 18:15:45 -070014
15namespace ndn {
16
17enum UpcallResult {
18 CLOSURE_RESULT_ERR = -1, // upcall detected an error
19 CLOSURE_RESULT_OK = 0, // normal upcall return
20 CLOSURE_RESULT_REEXPRESS = 1, // reexpress the same interest again
21 CLOSURE_RESULT_INTEREST_CONSUMED = 2, // upcall claims to consume interest
22 CLOSURE_RESULT_VERIFY = 3, // force an unverified result to be verified
23 CLOSURE_RESULT_FETCHKEY = 4 // get the key in the key locator and re-call the interest
24};
25
26enum UpcallKind {
27 UPCALL_FINAL = 0, // handler is about to be deregistered
28 UPCALL_INTEREST = 1, // incoming interest
29 UPCALL_CONSUMED_INTEREST = 2, // incoming interest, someone has answered
Jeff Thompson56ec9e22013-08-02 11:34:07 -070030 UPCALL_DATA = 3, // incoming verified data packet
Jeff Thompsonb982b6d2013-07-15 18:15:45 -070031 UPCALL_INTEREST_TIMED_OUT = 4, // interest timed out
Jeff Thompson56ec9e22013-08-02 11:34:07 -070032 UPCALL_DATA_UNVERIFIED = 5, // data packet that has not been verified
33 UPCALL_DATA_BAD = 6 // verification failed
Jeff Thompsonb982b6d2013-07-15 18:15:45 -070034};
35
Jeff Thompsonb9e3c8e2013-08-02 11:42:51 -070036class Face;
Jeff Thompsonb982b6d2013-07-15 18:15:45 -070037class Interest;
Jeff Thompson56ec9e22013-08-02 11:34:07 -070038class Data;
Jeff Thompsonb982b6d2013-07-15 18:15:45 -070039
40class UpcallInfo {
41public:
Jeff Thompsonb9e3c8e2013-08-02 11:42:51 -070042 UpcallInfo(Face *ndn, ptr_lib::shared_ptr<Interest> &interest, int matchedComps, ptr_lib::shared_ptr<Data> &data)
Jeff Thompsonb982b6d2013-07-15 18:15:45 -070043 {
44 ndn_ = ndn;
45 interest_ = interest;
Jeff Thompson56ec9e22013-08-02 11:34:07 -070046 data_ = data;
Jeff Thompsonb982b6d2013-07-15 18:15:45 -070047 }
48
Jeff Thompsonb9e3c8e2013-08-02 11:42:51 -070049 Face *getNDN() { return ndn_; }
Jeff Thompsonb982b6d2013-07-15 18:15:45 -070050
Jeff Thompson85ff99f2013-07-15 18:23:58 -070051 ptr_lib::shared_ptr<Interest> &getInterest() { return interest_; }
Jeff Thompsonb982b6d2013-07-15 18:15:45 -070052
Jeff Thompson56ec9e22013-08-02 11:34:07 -070053 ptr_lib::shared_ptr<Data> &getData() { return data_; }
Jeff Thompsonb982b6d2013-07-15 18:15:45 -070054
55private:
Jeff Thompsonb9e3c8e2013-08-02 11:42:51 -070056 Face *ndn_;
Jeff Thompsonb982b6d2013-07-15 18:15:45 -070057 ptr_lib::shared_ptr<Interest> interest_;
Jeff Thompson56ec9e22013-08-02 11:34:07 -070058 ptr_lib::shared_ptr<Data> data_;
Jeff Thompsonb982b6d2013-07-15 18:15:45 -070059};
60
61class Closure {
62public:
63 virtual UpcallResult upcall(UpcallKind kind, UpcallInfo &upcallInfo) = 0;
64};
65
66}
67
68#endif