You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

336 lines
9.0 KiB

/*
* 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 <windows.h>
#include <stdint.h>
/* 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
/* 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;
/* 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;
/* 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 */