in c/src/proactor/raw_connection.c [212:259]
bool pni_raw_validate(pn_raw_connection_t *conn) {
int rempty_count = 0;
for (buff_ptr i = conn->rbuffer_first_empty; i; i = conn->rbuffers[i-1].next) {
if (conn->rbuffers[i-1].type != buff_rempty) return false;
rempty_count++;
}
int runused_count = 0;
for (buff_ptr i = conn->rbuffer_first_unused; i; i = conn->rbuffers[i-1].next) {
if (conn->rbuffers[i-1].type != buff_unread) return false;
runused_count++;
}
int rread_count = 0;
for (buff_ptr i = conn->rbuffer_first_read; i; i = conn->rbuffers[i-1].next) {
if (conn->rbuffers[i-1].type != buff_read) return false;
rread_count++;
}
if (rempty_count+runused_count+rread_count != read_buffer_count) return false;
if (!conn->rbuffer_first_unused && conn->rbuffer_last_unused) return false;
if (conn->rbuffer_last_unused &&
(conn->rbuffers[conn->rbuffer_last_unused-1].type != buff_unread || conn->rbuffers[conn->rbuffer_last_unused-1].next != 0)) return false;
if (!conn->rbuffer_first_read && conn->rbuffer_last_read) return false;
if (conn->rbuffer_last_read &&
(conn->rbuffers[conn->rbuffer_last_read-1].type != buff_read || conn->rbuffers[conn->rbuffer_last_read-1].next != 0)) return false;
int wempty_count = 0;
for (buff_ptr i = conn->wbuffer_first_empty; i; i = conn->wbuffers[i-1].next) {
if (conn->wbuffers[i-1].type != buff_wempty) return false;
wempty_count++;
}
int wunwritten_count = 0;
for (buff_ptr i = conn->wbuffer_first_towrite; i; i = conn->wbuffers[i-1].next) {
if (conn->wbuffers[i-1].type != buff_unwritten) return false;
wunwritten_count++;
}
int wwritten_count = 0;
for (buff_ptr i = conn->wbuffer_first_written; i; i = conn->wbuffers[i-1].next) {
if (conn->wbuffers[i-1].type != buff_written) return false;
wwritten_count++;
}
if (wempty_count+wunwritten_count+wwritten_count != write_buffer_count) return false;
if (!conn->wbuffer_first_towrite && conn->wbuffer_last_towrite) return false;
if (conn->wbuffer_last_towrite &&
(conn->wbuffers[conn->wbuffer_last_towrite-1].type != buff_unwritten || conn->wbuffers[conn->wbuffer_last_towrite-1].next != 0)) return false;
if (!conn->wbuffer_first_written && conn->wbuffer_last_written) return false;
if (conn->wbuffer_last_written &&
(conn->wbuffers[conn->wbuffer_last_written-1].type != buff_written || conn->wbuffers[conn->wbuffer_last_written-1].next != 0)) return false;
return true;
}