/* * etcpmon_gui.h - ETCP Monitor GUI Header */ #ifndef ETCPMON_GUI_H #define ETCPMON_GUI_H /* Exclude winsock from windows.h to avoid conflict with winsock2.h */ #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif /* Windows headers */ #include #include /* Client structure is defined in etcpmon_client.h */ struct etcpmon_client; struct etcpmon_conn_info; struct etcpmon_rsp_metrics; struct etcpmon_link_metrics; /* Graph constants */ #include "etcpmon_graph.h" #ifdef __cplusplus extern "C" { #endif /* Window class name */ #define ETCPMON_WINDOW_CLASS "ETCPMonMainWindow" /* Control IDs */ #define IDC_STATIC -1 #define IDC_EDIT_ADDR 100 #define IDC_EDIT_PORT 101 #define IDC_BTN_CONNECT 102 #define IDC_BTN_DISCONNECT 103 #define IDC_LIST_CONNECTIONS 104 #define IDC_TIMER_UPDATE 105 /* ETCP Metrics control IDs */ #define IDC_EDIT_ETCP_NAME 200 #define IDC_EDIT_ETCP_RTT_LAST 201 #define IDC_EDIT_ETCP_RTT_AVG10 202 #define IDC_EDIT_ETCP_RTT_AVG100 203 #define IDC_EDIT_ETCP_JITTER 204 #define IDC_EDIT_ETCP_BYTES_SENT 205 #define IDC_EDIT_ETCP_RETRANS 206 #define IDC_EDIT_ETCP_ACKS 207 #define IDC_EDIT_ETCP_INFLIGHT 208 #define IDC_EDIT_ETCP_LINKS 209 /* TUN Metrics control IDs */ #define IDC_EDIT_TUN_READ_BYTES 300 #define IDC_EDIT_TUN_WRITE_BYTES 301 #define IDC_EDIT_TUN_READ_PKTS 302 #define IDC_EDIT_TUN_WRITE_PKTS 303 #define IDC_EDIT_TUN_READ_ERRS 304 #define IDC_EDIT_TUN_WRITE_ERRS 305 /* Routing Metrics control IDs */ #define IDC_EDIT_RT_ROUTED 306 #define IDC_EDIT_RT_DROPPED 307 #define IDC_EDIT_RT_TUN_IN_Q_PKTS 308 #define IDC_EDIT_RT_TUN_IN_Q_BYTES 309 #define IDC_EDIT_RT_TUN_OUT_Q_PKTS 310 #define IDC_EDIT_RT_TUN_OUT_Q_BYTES 311 #define IDC_EDIT_RT_COUNT 312 #define IDC_EDIT_RT_LOCAL 313 #define IDC_EDIT_RT_LEARNED 314 #define IDC_EDIT_RT_BGP_SENDERS 315 #define IDC_EDIT_RT_BGP_NODES 316 /* Link list control ID */ #define IDC_LIST_LINKS 400 /* Queue & Error Metrics control IDs */ #define IDC_STATIC_QUEUES 600 #define IDC_EDIT_Q_IN_Q_BYTES 601 #define IDC_EDIT_Q_IN_Q_PKTS 602 #define IDC_EDIT_Q_IN_SEND_BYTES 603 #define IDC_EDIT_Q_IN_SEND_PKTS 604 #define IDC_EDIT_Q_WAIT_ACK_BYTES 605 #define IDC_EDIT_Q_WAIT_ACK_PKTS 606 #define IDC_EDIT_Q_ACK_BYTES 607 #define IDC_EDIT_Q_ACK_PKTS 608 #define IDC_EDIT_Q_RECV_BYTES 609 #define IDC_EDIT_Q_RECV_PKTS 610 #define IDC_EDIT_Q_OUT_BYTES 611 #define IDC_EDIT_Q_OUT_PKTS 612 #define IDC_STATIC_ERRORS 620 #define IDC_EDIT_ERR_REINIT 621 #define IDC_EDIT_ERR_RESET 622 #define IDC_EDIT_ERR_PKT_FMT 623 #define IDC_STATIC_TIMERS 630 #define IDC_EDIT_TIMER_RETRANS 631 #define IDC_EDIT_TIMER_ACK_RESP 632 /* WaitAck queue state IDs */ #define IDC_EDIT_WAITACK_SUSP 650 #define IDC_EDIT_WAITACK_CB 651 #define IDC_EDIT_WAITACK_TIMER 652 /* ID Metrics control IDs */ #define IDC_STATIC_IDS 640 #define IDC_EDIT_ID_NEXT_TX 641 #define IDC_EDIT_ID_LAST_RX 642 #define IDC_EDIT_ID_LAST_DEL 643 #define IDC_EDIT_ID_RX_ACK_TILL 644 /* Normalizer IDs */ #define IDC_STATIC_NORM 660 #define IDC_EDIT_NORM_IN_PKTS 661 #define IDC_EDIT_NORM_IN_BYTES 662 #define IDC_EDIT_NORM_OUT_PKTS 663 #define IDC_EDIT_NORM_OUT_BYTES 664 #define IDC_EDIT_NORM_ALLOC_ERR 665 #define IDC_EDIT_NORM_LOGIC_ERR 666 #define IDC_EDIT_NORM_FRAG_SIZE 667 #define IDC_EDIT_NORM_DATA_PTR 668 #define IDC_EDIT_NORM_DATA_SIZE 669 #define IDC_EDIT_NORM_IN_TOT_PKTS 670 #define IDC_EDIT_NORM_IN_TOT_BYTES 671 #define IDC_EDIT_NORM_OUT_TOT_PKTS 672 #define IDC_EDIT_NORM_OUT_TOT_BYTES 673 /* ACK Debug IDs */ #define IDC_STATIC_ACKDBG 680 #define IDC_EDIT_ACK_HIT_INF 681 #define IDC_EDIT_ACK_HIT_SNDQ 682 #define IDC_EDIT_ACK_MISS 683 #define IDC_EDIT_CNT_LINK_WAIT 684 #define IDC_EDIT_TX_STATE 685 #define IDC_EDIT_DEBUG_0 686 #define IDC_EDIT_DEBUG_1 687 #define IDC_EDIT_DEBUG_2 688 #define IDC_EDIT_DEBUG_3 689 #define IDC_EDIT_DEBUG_4 690 #define IDC_EDIT_DEBUG_5 691 #define IDC_EDIT_DEBUG_6 692 #define IDC_EDIT_DEBUG_7 693 /* Graph control ID */ #define IDC_GRAPH 500 /* Channel block IDs */ #define IDC_CH_NAME_0 510 #define IDC_CH_VALUE_0 520 #define IDC_CH_CHECK_0 530 #define IDC_CH_NAME_1 511 #define IDC_CH_VALUE_1 521 #define IDC_CH_CHECK_1 531 #define IDC_CH_NAME_2 512 #define IDC_CH_VALUE_2 522 #define IDC_CH_CHECK_2 532 #define IDC_CH_NAME_3 513 #define IDC_CH_VALUE_3 523 #define IDC_CH_CHECK_3 533 #define IDC_CH_NAME_4 514 #define IDC_CH_VALUE_4 524 #define IDC_CH_CHECK_4 534 #define IDC_CH_NAME_5 515 #define IDC_CH_VALUE_5 525 #define IDC_CH_CHECK_5 535 #define IDC_CH_NAME_6 516 #define IDC_CH_VALUE_6 526 #define IDC_CH_CHECK_6 536 #define IDC_CH_NAME_7 517 #define IDC_CH_VALUE_7 527 #define IDC_CH_CHECK_7 537 /* Main application structure */ struct etcpmon_app { HINSTANCE hInstance; HWND hWndMain; HWND hWndStatus; HPEN hGraphPens[GRAPH_METRICS_COUNT]; /* Connection controls */ HWND hEditAddr; HWND hEditPort; HWND hBtnConnect; HWND hBtnDisconnect; HWND hListConnections; /* ETCP metrics controls */ HWND hEditEtcpName; HWND hEditEtcpRttLast; HWND hEditEtcpRttAvg10; HWND hEditEtcpRttAvg100; HWND hEditEtcpJitter; HWND hEditEtcpBytesSent; HWND hEditEtcpRetrans; HWND hEditEtcpAcks; HWND hEditEtcpInflight; HWND hEditEtcpLinks; /* TUN metrics controls */ HWND hEditTunReadBytes; HWND hEditTunWriteBytes; HWND hEditTunReadPkts; HWND hEditTunWritePkts; HWND hEditTunReadErrs; HWND hEditTunWriteErrs; /* Routing metrics controls */ HWND hEditRtRouted; HWND hEditRtDropped; HWND hEditRtTunInQPkts; HWND hEditRtTunInQBytes; HWND hEditRtTunOutQPkts; HWND hEditRtTunOutQBytes; HWND hEditRtCount; HWND hEditRtLocal; HWND hEditRtLearned; HWND hEditRtBgpSenders; HWND hEditRtBgpNodes; /* Links list */ HWND hListLinks; /* Queue metrics controls */ HWND hEditQInQBytes; HWND hEditQInQPkts; HWND hEditQInSendBytes; HWND hEditQInSendPkts; HWND hEditQWaitAckBytes; HWND hEditQWaitAckPkts; HWND hEditQAckBytes; HWND hEditQAckPkts; HWND hEditQRecvBytes; HWND hEditQRecvPkts; HWND hEditQOutBytes; HWND hEditQOutPkts; /* Error counters */ HWND hEditErrReinit; HWND hEditErrReset; HWND hEditErrPktFmt; /* Timer flags */ HWND hEditTimerRetrans; HWND hEditTimerAckResp; /* WaitAck queue state */ HWND hEditWaitAckSuspend; HWND hEditWaitAckCb; HWND hEditWaitAckTimer; /* ID metrics */ HWND hEditIdNextTx; HWND hEditIdLastRx; HWND hEditIdLastDel; HWND hEditIdRxAckTill; /* Normalizer */ HWND hEditNormInPkts; HWND hEditNormInBytes; HWND hEditNormOutPkts; HWND hEditNormOutBytes; HWND hEditNormAllocErr; HWND hEditNormLogicErr; HWND hEditNormFragSize; HWND hEditNormDataPtr; HWND hEditNormDataSize; HWND hEditNormInTotPkts; HWND hEditNormInTotBytes; HWND hEditNormOutTotPkts; HWND hEditNormOutTotBytes; /* ACK Debug counters */ HWND hEditAckHitInf; HWND hEditAckHitSndq; HWND hEditAckMiss; HWND hEditCntLinkWait; HWND hEditTxState; HWND hEditDebug[8]; /* Graph controls */ HWND hGraphWnd; HWND hChannelName[GRAPH_METRICS_COUNT]; HWND hChannelValue[GRAPH_METRICS_COUNT]; HWND hChannelCheck[GRAPH_METRICS_COUNT]; /* Cursor (вертикальная линия остаётся) */ int graph_cursor_x; int graph_cursor_y; int graph_cursor_active; /* Client state */ struct etcpmon_client* client; int need_initial_request; /* 1 = нужно запросить список при первом таймере */ uint64_t last_selected_peer_id; /* чтобы не спамить SELECT_CONN каждый тик */ /* Timer */ UINT_PTR updateTimer; DWORD last_poll_time; int isConnected; }; /* Initialize application */ int etcpmon_gui_init(struct etcpmon_app* app, HINSTANCE hInstance); /* Create main window */ HWND etcpmon_gui_create_window(struct etcpmon_app* app); /* Run message loop */ int etcpmon_gui_run(struct etcpmon_app* app); /* Cleanup */ void etcpmon_gui_cleanup(struct etcpmon_app* app); /* Update connection status display */ void etcpmon_gui_set_status(struct etcpmon_app* app, const char* text); /* Update connection list */ void etcpmon_gui_update_conn_list(struct etcpmon_app* app, struct etcpmon_conn_info* list, uint8_t count); /* Update metrics display */ void etcpmon_gui_update_metrics(struct etcpmon_app* app, struct etcpmon_rsp_metrics* metrics, struct etcpmon_link_metrics* links, uint8_t links_count); /* Clear metrics display */ void etcpmon_gui_clear_metrics(struct etcpmon_app* app); /* Update graph with new metrics */ void etcpmon_gui_update_graph(struct etcpmon_app* app, struct etcpmon_rsp_metrics* metrics); #ifdef __cplusplus } #endif #endif /* ETCPMON_GUI_H */