Upcall.ccn_upcall_res WriteCallback(IntPtr selfp, Upcall.ccn_upcall_kind kind, IntPtr info) { print("WriteCallback... " + kind); Upcall.ccn_upcall_res ret = Upcall.ccn_upcall_res.CCN_UPCALL_RESULT_OK; Egal.ccn_upcall_info Info = new Egal.ccn_upcall_info(); Info = (Egal.ccn_upcall_info)Marshal.PtrToStructure(info, typeof(Egal.ccn_upcall_info)); IntPtr h = Info.h; Egal.ccn_closure Selfp = new Egal.ccn_closure(); Selfp = (Egal.ccn_closure)Marshal.PtrToStructure(selfp, typeof(Egal.ccn_closure)); NormalStruct Data = new NormalStruct(); Data = (NormalStruct)Marshal.PtrToStructure(Selfp.data, typeof(NormalStruct)); switch (kind) { case Upcall.ccn_upcall_kind.CCN_UPCALL_FINAL: // Marshal.FreeHGlobal(selfp); // this again, will make Unity crash break; case Upcall.ccn_upcall_kind.CCN_UPCALL_INTEREST: PutContent(h, Data); // publish content ret = Upcall.ccn_upcall_res.CCN_UPCALL_RESULT_INTEREST_CONSUMED; break; case Upcall.ccn_upcall_kind.CCN_UPCALL_CONTENT: // repo first returns a content... // this is info of the repo... break; default: ret = Upcall.ccn_upcall_res.CCN_UPCALL_RESULT_ERR; break; } // print ("ref count: " + Selfp.refcount); // print ("WriteCallback returnning..." + ret); return(ret); }
static Upcall.ccn_upcall_res ReadCallback(IntPtr selfp, Upcall.ccn_upcall_kind kind, IntPtr info) { print("ReadCallback! " + kind); Upcall.ccn_upcall_res res = Upcall.ccn_upcall_res.CCN_UPCALL_RESULT_OK; Egal.ccn_upcall_info Info = new Egal.ccn_upcall_info(); Info = (Egal.ccn_upcall_info)Marshal.PtrToStructure(info, typeof(Egal.ccn_upcall_info)); IntPtr h=Info.h; switch (kind) { case Upcall.ccn_upcall_kind.CCN_UPCALL_CONTENT: //print("ReadCallback: CCN_UPCALL_CONTENT"); IntPtr source_ptr = Info.content_ccnb; Egal.ccn_parsed_ContentObject Pco = new Egal.ccn_parsed_ContentObject(); Pco = (Egal.ccn_parsed_ContentObject)Marshal.PtrToStructure(Info.content_ccnb, typeof(Egal.ccn_parsed_ContentObject)); UInt16 source_length = Pco.offset[(int)PCO.ccn_parsed_content_object_offsetid.CCN_PCO_E]; IntPtr result_ptr = IntPtr.Zero; int result_length = 0; Egal.ccn_content_get_value(source_ptr, source_length, Info.pco, ref result_ptr, ref result_length); String content = Marshal.PtrToStringAnsi(result_ptr); print(content); break; case Upcall.ccn_upcall_kind.CCN_UPCALL_FINAL: //print("ReadCallback: CCN_UPCALL_FINAL"); Egal.ccn_set_run_timeout(h, 0); break; default: break; } return res; }
Upcall.ccn_upcall_res WriteCallback(IntPtr selfp, Upcall.ccn_upcall_kind kind, IntPtr info) { print("WriteCallback... " + kind); Upcall.ccn_upcall_res ret = Upcall.ccn_upcall_res.CCN_UPCALL_RESULT_OK; Egal.ccn_upcall_info Info = new Egal.ccn_upcall_info(); Info = (Egal.ccn_upcall_info)Marshal.PtrToStructure(info, typeof(Egal.ccn_upcall_info)); IntPtr h = Info.h; Egal.ccn_closure Selfp = new Egal.ccn_closure(); Selfp = (Egal.ccn_closure)Marshal.PtrToStructure(selfp, typeof(Egal.ccn_closure)); NormalStruct Data = new NormalStruct(); Data = (NormalStruct) Marshal.PtrToStructure(Selfp.data, typeof(NormalStruct)); switch(kind) { case Upcall.ccn_upcall_kind.CCN_UPCALL_FINAL: // Marshal.FreeHGlobal(selfp); // this again, will make Unity crash break; case Upcall.ccn_upcall_kind.CCN_UPCALL_INTEREST: // print ("put content handle: " + h + ", content: " + Data.value); int res = PutContent(h, Data); if(res >= 0) { ret = Upcall.ccn_upcall_res.CCN_UPCALL_RESULT_INTEREST_CONSUMED; Egal.ccn_set_run_timeout(h, 0); } else print("put content error"); break; case Upcall.ccn_upcall_kind.CCN_UPCALL_CONTENT: // repo first returns a content... // this is info of the repo... break; default: ret = Upcall.ccn_upcall_res.CCN_UPCALL_RESULT_ERR; break; } // print ("ref count: " + Selfp.refcount); // print ("WriteCallback returnning..." + ret); return ret; }
// GetInfo() // Marshal ccn_upcall_info public static ccn_upcall_info GetInfo(IntPtr info) { ccn_upcall_info Info = new Egal.ccn_upcall_info(); Info = (ccn_upcall_info)Marshal.PtrToStructure(info, typeof(ccn_upcall_info)); return Info; }