EVPath
|
00001 00002 #ifndef __EVPATH__H__ 00003 #define __EVPATH__H__ 00004 00006 #include "ffs.h" 00007 #include "atl.h" 00008 #ifdef __cplusplus 00009 extern "C" { 00010 #endif 00011 00012 #ifndef TRUE 00013 #define TRUE 1 00014 #endif 00015 #ifndef FALSE 00016 #define FALSE 0 00017 #endif 00018 00019 00020 00021 00022 struct _CManager; 00023 struct _CMConnection; 00024 struct _CMFormat; 00025 00031 typedef struct _CManager *CManager; 00032 00038 typedef struct _CMConnection *CMConnection; 00039 00048 typedef struct _CMFormat *CMFormat; 00049 00053 typedef struct _CMTaskHandle *CMTaskHandle; 00054 00059 typedef struct buf_entry { 00060 long length; 00061 void *buffer; 00062 } *EVevent_list; 00063 00081 typedef void (*CMHandlerFunc) (CManager cm, 00082 CMConnection conn, 00083 void *message, void *client_data, 00084 attr_list attrs); 00085 00096 typedef void (*CMPollFunc) (CManager cm, void *client_data); 00097 00109 typedef void (*CMCloseHandlerFunc) (CManager cm, CMConnection conn, 00110 void *client_data); 00111 00123 typedef void (*CMWriteCallbackFunc) (CManager cm, CMConnection conn, 00124 void *client_data); 00125 00126 00127 00133 /*NOLOCK*/ 00134 extern CManager CManager_create(); 00135 00143 extern void CManager_close (CManager cm); 00144 00152 /*NOLOCK*/ 00153 extern void CMTrace_file_id (int ID); 00154 00169 extern int CMfork_comm_thread (CManager cm); 00170 00182 extern int CMlisten (CManager cm); 00183 00209 extern int CMlisten_specific (CManager cm, attr_list listen_info); 00210 00220 extern attr_list 00221 CMget_contact_list (CManager cm); 00222 00232 extern void 00233 CM_insert_contact_info (CManager cm, attr_list attrs); 00234 00246 extern attr_list 00247 CMget_specific_contact_list (CManager cm, attr_list attrs); 00248 00261 extern int 00262 CMcontact_self_check (CManager cm, attr_list attrs); 00263 00278 extern CMConnection 00279 CMget_conn (CManager cm, attr_list contact_list); 00280 00296 extern CMConnection 00297 CMinitiate_conn (CManager cm, attr_list contact_list); 00298 00313 extern void 00314 CMConnection_close (CMConnection conn); 00315 00324 extern void 00325 CMConnection_add_reference (CMConnection conn); 00326 00337 extern void 00338 CMconn_register_close_handler (CMConnection conn, 00339 CMCloseHandlerFunc func, 00340 void *client_data); 00347 extern attr_list 00348 CMConnection_get_attrs (CMConnection conn); 00349 00357 extern int 00358 CMConnection_set_character (CMConnection conn, attr_list attrs); 00359 00367 extern CMConnection 00368 CMget_indexed_conn (CManager cm, int i); 00369 00382 extern CMFormat 00383 CMregister_format (CManager cm, FMStructDescList format_list); 00384 00400 extern CMFormat 00401 CMregister_simple_format (CManager cm, char *format_name, FMFieldList field_list, int struct_size); 00402 00425 extern CMFormat CMlookup_format (CManager cm, FMStructDescList format_list); 00426 00434 /*NOLOCK*/ 00435 extern FMContext CMget_FMcontext(CManager cm); 00436 00449 extern int 00450 CMwrite (CMConnection conn, CMFormat format, void *data); 00451 00471 extern int 00472 CMwrite_attr (CMConnection conn, CMFormat format, void *data, 00473 attr_list attrs); 00474 00484 extern void 00485 CMregister_handler (CMFormat format, CMHandlerFunc handler, 00486 void *client_data); 00487 00498 extern void 00499 CMregister_write_callback (CMConnection conn, 00500 CMWriteCallbackFunc handler, 00501 void *client_data); 00502 00518 extern int 00519 CMConnection_write_would_block (CMConnection conn); 00520 00538 extern void *CMtake_buffer (CManager cm, void *data); 00539 00549 extern void CMreturn_buffer (CManager cm, void *data); 00550 00551 #include "cm_transport.h" 00562 typedef int (*CMNonCMHandler) (CMConnection conn, CMTransport transport, 00563 char *buffer, long length); 00564 00583 /*NOLOCK*/ 00584 extern void 00585 CMregister_non_CM_message_handler (int header, CMNonCMHandler handler); 00586 00595 /*NOLOCK*/ 00596 extern CMtrans_services 00597 CMget_static_trans_services (); 00598 00607 extern void* 00608 CMget_transport_data (CMConnection conn); 00609 00620 extern void 00621 CMadd_poll (CManager cm, CMPollFunc func, void *client_data); 00622 00642 extern CMTaskHandle 00643 CMadd_periodic_task (CManager cm, int period_sec, int period_usec, 00644 CMPollFunc func, void *client_data); 00645 00663 extern CMTaskHandle 00664 CMadd_delayed_task (CManager cm, int secs, int usecs, CMPollFunc func, 00665 void *client_data); 00666 00672 extern void 00673 CMremove_task (CMTaskHandle handle); 00674 00687 extern void 00688 CMadd_shutdown_task (CManager cm, CMPollFunc func, void *client_data, int task_type); 00689 00693 #define NO_TASK 0 00694 00697 #define SHUTDOWN_TASK 1 00698 00701 #define FREE_TASK 2 00702 00714 extern CMTaskHandle 00715 CMadd_periodic (CManager cm, long period, CMPollFunc func, 00716 void *client_data); 00717 00724 extern void 00725 CMremove_periodic (CMTaskHandle handle); 00726 00739 extern void 00740 CMsleep (CManager cm, int secs); 00741 00754 extern void 00755 CMusleep (CManager cm, int usecs); 00756 00769 extern 00770 void CMpoll_network (CManager cm); 00771 00781 extern 00782 void CMrun_network (CManager cm); 00783 00792 typedef void (*select_func) (void *param1, void*param2); 00793 00804 extern void 00805 CM_fd_add_select (CManager cm, int fd, select_func handler_func, 00806 void *param1, void *param2); 00807 00828 extern int CMCondition_get (CManager cm, CMConnection dep); 00829 00853 extern int CMCondition_wait (CManager cm, int condition); 00854 00866 extern void CMCondition_signal (CManager cm, int condition); 00867 00890 extern void CMCondition_set_client_data (CManager cm, int condition, 00891 void *client_data); 00910 extern void *CMCondition_get_client_data (CManager cm, int condition); 00911 00924 extern int CMCondition_has_signaled (CManager cm, int condition); 00937 extern int CMCondition_has_failed (CManager cm, int condition); 00938 00954 /*NOLOCK*/ 00955 extern void* CMrealloc (void *ptr, long size); 00962 /*NOLOCK*/ 00963 extern void* CMmalloc (long size); 00969 /*NOLOCK*/ 00970 extern void CMfree (void *ptr); 00971 00995 extern long CMprobe_latency (CMConnection conn, long msg_size, 00996 attr_list attrs); 00997 01013 extern double 01014 CMprobe_bandwidth (CMConnection conn, long size, attr_list attrs); 01015 01031 extern double 01032 CMregressive_probe_bandwidth (CMConnection conn, long size, attr_list attrs); 01033 01038 /*NOLOCK*/ 01039 extern int 01040 CMget_self_ip_addr(CManager cm); 01041 01045 struct _EVStone; 01046 struct _EVSource; 01054 typedef int EVstone; 01063 typedef int EVaction; 01072 typedef struct _EVSource *EVsource; 01073 01083 typedef void (*EVSubmitCallbackFunc) (CManager cm, EVstone target, 01084 void *client_data); 01085 01102 typedef int (*EVSimpleHandlerFunc) (CManager cm, void *message, void *client_data, 01103 attr_list attrs); 01104 01122 typedef int (*EVRawHandlerFunc) (CManager cm, void *message, int msg_len, void *client_data, 01123 attr_list attrs); 01124 01137 typedef void (*EVStoneCloseHandlerFunc) (CManager cm, CMConnection conn, int stone, void *client_data); 01138 01139 struct _event_item; 01140 01152 /*REMOTE*/ 01153 extern EVstone 01154 EValloc_stone(CManager cm); 01155 01164 /*REMOTE*/ 01165 extern void 01166 EVfree_stone(CManager cm, EVstone stone); 01167 01186 /*REMOTE*/ 01187 extern EVaction 01188 EVassoc_terminal_action(CManager cm, EVstone stone, FMStructDescList format_list, 01189 EVSimpleHandlerFunc handler, void* client_data); 01190 01208 extern EVaction 01209 EVassoc_raw_terminal_action(CManager cm, EVstone stone, 01210 EVRawHandlerFunc handler, void* client_data); 01211 01231 /*REMOTE*/ 01232 extern EVstone 01233 EVcreate_terminal_action(CManager cm, FMStructDescList format_list, 01234 EVSimpleHandlerFunc handler, void* client_data); 01235 01259 /*REMOTE*/ 01260 extern EVaction 01261 EVassoc_multi_action(CManager cm, EVstone stone, char *action_spec, 01262 void *client_data); 01263 01283 /*REMOTE*/ 01284 extern EVaction 01285 EVassoc_immediate_action(CManager cm, EVstone stone, char *action_spec, 01286 void *client_data); 01287 01310 /*REMOTE*/ 01311 extern EVstone 01312 EVcreate_immediate_action(CManager cm, char *action_spec, EVstone *target_list); 01313 01336 /*REMOTE*/ 01337 extern int 01338 EVaction_set_output(CManager cm, EVstone stone, EVaction action, 01339 int output_index, EVstone target_stone); 01340 01355 /*REMOTE*/ 01356 extern int 01357 EVstone_set_output(CManager cm, EVstone stone, int output_index, EVstone target_stone); 01358 01382 /*REMOTE*/ 01383 extern EVaction 01384 EVassoc_filter_action(CManager cm, EVstone stone, 01385 FMStructDescList incoming_format_list, 01386 EVSimpleHandlerFunc handler, EVstone out_stone, 01387 void* client_data); 01388 01412 /*REMOTE*/ 01413 extern EVaction 01414 EVassoc_bridge_action(CManager cm, EVstone stone, attr_list contact_list, 01415 EVstone remote_stone); 01416 01441 /*REMOTE*/ 01442 extern EVstone 01443 EVcreate_bridge_action(CManager cm, attr_list contact_list, 01444 EVstone remote_stone); 01445 01465 extern EVaction 01466 EVassoc_thread_bridge_action(CManager cm, EVstone stone, CManager target_cm, 01467 EVstone target_stone); 01468 01487 extern EVstone 01488 EVcreate_thread_bridge_action(CManager cm, CManager target_cm, 01489 EVstone target_stone); 01490 01508 /*REMOTE*/ 01509 extern EVaction 01510 EVassoc_split_action(CManager cm, EVstone stone, EVstone *target_list); 01511 01529 /*REMOTE*/ 01530 extern EVstone 01531 EVcreate_split_action(CManager cm, EVstone *target_list); 01532 01546 /*REMOTE*/ 01547 extern int 01548 EVaction_add_split_target(CManager cm, EVstone stone, EVaction action, 01549 EVstone target_stone); 01550 01562 /*REMOTE*/ 01563 extern void 01564 EVaction_remove_split_target(CManager cm, EVstone stone, EVaction action, 01565 EVstone target_stone); 01566 01577 /*REMOTE*/ 01578 extern void 01579 EVstone_add_split_target(CManager cm, EVstone stone, EVstone target_stone); 01580 01591 /*REMOTE*/ 01592 extern void 01593 EVstone_remove_split_target(CManager cm, EVstone stone, EVstone target_stone); 01594 01613 extern EVaction 01614 EVassoc_congestion_action(CManager cm, EVstone stone, char *action_spec, 01615 void* client_data); 01616 01629 /*REMOTE*/ 01630 extern EVstone 01631 EVcreate_store_action(CManager cm, EVstone out_stone, int store_limit); 01632 01642 /*REMOTE*/ 01643 extern EVstone 01644 EVcreate_stone_action(CManager cm, char *action_spec); 01645 01662 /*REMOTE*/ 01663 extern EVaction 01664 EVassoc_store_action(CManager cm, EVstone stone_num, EVstone out_stone, 01665 int store_limit); 01666 01674 /*REMOTE*/ /* XXX??? */ 01675 extern void 01676 EVclear_stored(CManager cm, EVstone stone_num, EVaction action_num); 01677 01686 extern void 01687 EVsend_stored(CManager cm, EVstone stone_num, EVaction action_num); 01688 01697 extern int 01698 EVstore_count(CManager cm, EVstone stone_num, EVaction action_num); 01699 01708 extern int 01709 EVstore_is_sending(CManager cm, EVstone stone_num, EVaction action_num); 01710 01718 extern void 01719 EVstore_start_send(CManager cm, EVstone stone_num, EVaction action_num); 01720 01731 extern void 01732 EVset_store_limit(CManager cm, EVstone stone_num, EVaction action_num, 01733 int store_limit); 01734 01749 extern EVsource 01750 EVcreate_submit_handle(CManager cm, EVstone stone, FMStructDescList data_format); 01751 01758 extern void 01759 EVfree_source(EVsource source); 01760 01778 typedef void (*EVFreeFunction) (void *event_data, void *client_data); 01779 01802 extern EVsource 01803 EVcreate_submit_handle_free(CManager cm, EVstone stone, FMStructDescList data_format, 01804 EVFreeFunction free_func, void *client_data); 01805 01821 extern void 01822 EVsubmit(EVsource source, void *data, attr_list attrs); 01823 01845 extern void 01846 EVsubmit_general(EVsource source, void *data, EVFreeFunction free_func, 01847 attr_list attrs); 01848 01866 extern void 01867 EVsubmit_encoded(CManager cm, EVstone stone, void *data, int data_len, 01868 attr_list attrs); 01869 01881 /*REMOTE*/ 01882 extern int 01883 EVtransfer_events(CManager cm, EVstone src_stone, EVstone dest_stone); 01884 01903 extern int 01904 EVtake_event_buffer (CManager cm, void *event); 01905 01915 extern void 01916 EVreturn_event_buffer (CManager cm, void *event); 01917 01928 extern FMFormat 01929 EVget_src_ref_format(EVsource source); 01930 01940 /*REMOTE*/ 01941 extern void 01942 EVenable_auto_stone(CManager cm, EVstone stone_num, int period_sec, 01943 int period_usec); 01944 01960 /*REMOTE*/ 01961 extern EVstone 01962 EVcreate_auto_stone(CManager cm, int period_sec, int period_usec, 01963 char *action_spec, EVstone out_stone); 01964 01965 01978 /*REMOTE*/ 01979 extern void 01980 EVstall_stone(CManager cm, EVstone stone_id); 01981 01990 /*REMOTE*/ 01991 extern void 01992 EVunstall_stone(CManager cm, EVstone stone_id); 01993 02004 extern int 02005 EVsubmit_or_wait(EVsource source, void *data, attr_list attrs, EVSubmitCallbackFunc cb, void *user_data); 02006 02017 extern int 02018 EVsubmit_encoded_or_wait(CManager cm, EVstone stone, void *data, int data_len, attr_list attrs, 02019 EVSubmitCallbackFunc cb, void *user_data); 02020 02033 /*REMOTE*/ 02034 extern int 02035 EVfreeze_stone(CManager cm, EVstone stone_id); 02036 02047 /*REMOTE*/ 02048 extern int 02049 EVunfreeze_stone(CManager cm, EVstone stone_id); 02050 02065 /*REMOTE*/ 02066 extern int 02067 EVdrain_stone(CManager cm, EVstone stone_id); 02068 02084 extern EVstone 02085 EVexecuting_stone(CManager cm); 02086 02099 extern EVevent_list 02100 EVextract_stone_events(CManager cm, EVstone stone_id); 02101 02112 /*REMOTE*/ 02113 extern attr_list 02114 EVextract_attr_list(CManager cm, EVstone stone_id); 02115 02126 /*REMOTE*/ 02127 extern void 02128 EVset_attr_list(CManager cm, EVstone stone_id, attr_list list); 02129 02139 /*REMOTE*/ 02140 extern int 02141 EVdestroy_stone(CManager cm, EVstone stone_id); 02142 02152 /*NOLOCK*/ 02153 extern char * 02154 create_filter_action_spec(FMStructDescList format_list, char *function); 02155 02168 /*NOLOCK*/ 02169 extern char * 02170 create_router_action_spec(FMStructDescList format_list, char *function); 02171 02182 /*NOLOCK*/ 02183 extern char * 02184 create_transform_action_spec(FMStructDescList format_list, FMStructDescList out_format_list, char *function); 02185 02194 /*NOLOCK*/ 02195 extern char * 02196 create_multityped_action_spec(FMStructDescList *input_format_lists, char *function); 02197 02198 #ifdef __COD__H__ 02199 02209 extern void 02210 EVadd_standard_routines(CManager cm, char *extern_string, 02211 cod_extern_entry *externs); 02212 #endif 02213 02219 /*NOLOCK*/ 02220 extern void 02221 EVadd_dll_search_dir(char *path_string); 02222 02229 extern void 02230 EVadd_standard_structs(CManager cm, FMStructDescList *lists); 02231 02239 extern void 02240 EVregister_close_handler(CManager cm, EVStoneCloseHandlerFunc handler, void *client_data); 02241 02249 void 02250 EVdump_stone(CManager cm, EVstone stone_num); 02251 02260 typedef int (*EVImmediateHandlerFunc) (CManager cm, struct _event_item *event, 02261 void *client_data, attr_list attrs, 02262 int out_count, int *out_stones); 02271 extern void 02272 EVassoc_conversion_action(CManager cm, int stone_id, int stage, FMFormat target_format, 02273 FMFormat incoming_format); 02274 02298 extern attr_list 02299 CMtest_transport(CMConnection conn, attr_list how); 02300 02317 typedef attr_list (*CMperf_upcall)(CManager cm, void *buffer, long length, int type, attr_list list); 02318 02327 extern void 02328 CMinstall_perf_upcall(CManager cm, CMperf_upcall upcall); 02329 02330 /* @}*/ 02331 02332 #ifdef __cplusplus 02333 } 02334 #endif 02335 02336 #endif