32
32
#include " HAPAccessoryServer+Internal.h"
33
33
#include " HAPPlatformTCPStreamManager+Init.h"
34
34
35
+ #include " shelly_main.hpp"
36
+
35
37
namespace shelly {
36
38
39
+ static HAPAccessoryServerRef s_svr;
37
40
static HAPPlatformKeyValueStoreRef s_kvs;
38
41
static HAPPlatformTCPStreamManagerRef s_tcpm;
39
42
43
+ struct EnumHAPSessionsContext {
44
+ struct mg_connection *nc;
45
+ int num_sessions;
46
+ };
47
+
48
+ static void EnumHAPSessions (void *vctx, HAPAccessoryServerRef *svr_,
49
+ HAPSessionRef *s, bool *) {
50
+ EnumHAPSessionsContext *ctx = (EnumHAPSessionsContext *) vctx;
51
+ size_t si = HAPAccessoryServerGetIPSessionIndex (svr_, s);
52
+ const HAPAccessoryServer *svr = (const HAPAccessoryServer *) svr_;
53
+ const HAPIPSession *is = &svr->ip .storage ->sessions [si];
54
+ const auto *sd = (const HAPIPSessionDescriptor *) &is->descriptor ;
55
+ mg_printf (ctx->nc , " %d: s %p ts %p o %d st %d ts %lu\r\n " , (int ) si, s,
56
+ (void *) sd->tcpStream , sd->tcpStreamIsOpen , sd->state ,
57
+ (unsigned long ) sd->stamp );
58
+ ctx->num_sessions ++;
59
+ }
60
+
40
61
void shelly_debug_write_nc (struct mg_connection *nc) {
41
62
uint16_t cn;
42
63
if (HAPAccessoryServerGetCN (s_kvs, &cn) != kHAPError_None ) {
@@ -48,41 +69,51 @@ void shelly_debug_write_nc(struct mg_connection *nc) {
48
69
" App: %s %s %s\r\n "
49
70
" Uptime: %.2lf\r\n "
50
71
" RAM: %lu free, %lu min free\r\n "
72
+ " HAP server port: %d\r\n "
51
73
" HAP config number: %u\r\n "
52
74
" HAP connection stats: %u/%u/%u\r\n " ,
53
75
MGOS_APP, mgos_sys_ro_vars_get_fw_version (),
54
76
mgos_sys_ro_vars_get_fw_id (), mgos_uptime (),
55
77
(unsigned long ) mgos_get_free_heap_size (),
56
- (unsigned long ) mgos_get_min_free_heap_size (), cn,
78
+ (unsigned long ) mgos_get_min_free_heap_size (),
79
+ HAPPlatformTCPStreamManagerGetListenerPort (s_tcpm), cn,
57
80
(unsigned ) tcpm_stats.numPendingTCPStreams ,
58
81
(unsigned ) tcpm_stats.numActiveTCPStreams ,
59
82
(unsigned ) tcpm_stats.maxNumTCPStreams );
60
83
mg_printf (nc, " HAP connections:\r\n " );
61
84
time_t now_wall = mg_time ();
62
85
int64_t now_micros = mgos_uptime_micros ();
63
- int num_hap_connections = 0 ;
64
- struct mg_connection *nc2 = NULL ;
65
- struct mg_mgr *mgr = mgos_get_mgr ();
66
- for (nc2 = mg_next (mgr, NULL ); nc2 != NULL ; nc2 = mg_next (mgr, nc2)) {
67
- if (nc2->listener == NULL ||
68
- ntohs (nc2->listener ->sa .sin .sin_port ) != 9000 ) {
69
- continue ;
70
- }
71
- char addr[32 ];
72
- mg_sock_addr_to_str (&nc2->sa , addr, sizeof (addr),
73
- MG_SOCK_STRINGIFY_IP | MG_SOCK_STRINGIFY_PORT);
74
- int last_io_age = (int ) (now_wall - nc2->last_io_time );
75
- int64_t last_read_age = 0 ;
76
- HAPPlatformTCPStream *ts = (HAPPlatformTCPStream *) nc2->user_data ;
77
- if (ts != nullptr ) {
78
- last_read_age = now_micros - ts->lastRead ;
86
+ {
87
+ int num_hap_connections = 0 ;
88
+ struct mg_connection *nc2 = NULL ;
89
+ struct mg_mgr *mgr = mgos_get_mgr ();
90
+ for (nc2 = mg_next (mgr, NULL ); nc2 != NULL ; nc2 = mg_next (mgr, nc2)) {
91
+ if (nc2->listener == NULL ||
92
+ ntohs (nc2->listener ->sa .sin .sin_port ) != 9000 ) {
93
+ continue ;
94
+ }
95
+ char addr[32 ];
96
+ mg_sock_addr_to_str (&nc2->sa , addr, sizeof (addr),
97
+ MG_SOCK_STRINGIFY_IP | MG_SOCK_STRINGIFY_PORT);
98
+ int last_io_age = (int ) (now_wall - nc2->last_io_time );
99
+ int64_t last_read_age = 0 ;
100
+ HAPPlatformTCPStream *ts = (HAPPlatformTCPStream *) nc2->user_data ;
101
+ if (ts != nullptr ) {
102
+ last_read_age = now_micros - ts->lastRead ;
103
+ }
104
+ mg_printf (nc, " %s nc %pf %#lx io %d ts %p rd %lld\r\n " , addr, nc2,
105
+ (unsigned long ) nc2->flags , last_io_age, ts,
106
+ (long long ) (last_read_age / 1000000 ));
107
+ num_hap_connections++;
79
108
}
80
- mg_printf (nc, " %s nc %pf %#lx io %d ts %p rd %lld\r\n " , addr, nc2,
81
- (unsigned long ) nc2->flags , last_io_age, ts,
82
- (long long ) (last_read_age / 1000000 ));
83
- num_hap_connections++;
109
+ mg_printf (nc, " Total: %d\r\n " , num_hap_connections);
110
+ }
111
+ {
112
+ mg_printf (nc, " HAP sessions:\r\n " );
113
+ EnumHAPSessionsContext ctx = {.nc = nc, .num_sessions = 0 };
114
+ HAPAccessoryServerEnumerateConnectedSessions (&s_svr, EnumHAPSessions, &ctx);
115
+ mg_printf (nc, " Total: %d\r\n " , ctx.num_sessions );
84
116
}
85
- mg_printf (nc, " Total: %d" , num_hap_connections);
86
117
}
87
118
88
119
void GetDebugInfo (std::string *out) {
@@ -236,8 +267,9 @@ static void DebugCoreHandler(struct mg_connection *nc, int ev, void *ev_data,
236
267
}
237
268
#endif
238
269
239
- bool DebugInit (HAPPlatformKeyValueStoreRef kvs,
270
+ bool DebugInit (HAPAccessoryServerRef svr, HAPPlatformKeyValueStoreRef kvs,
240
271
HAPPlatformTCPStreamManagerRef tcpm) {
272
+ s_svr = svr;
241
273
s_kvs = kvs;
242
274
s_tcpm = tcpm;
243
275
mgos_register_http_endpoint (" /debug/info" , DebugInfoHandler, NULL );
0 commit comments