public void writeHeader(IDictionary key_vals, WriteFinishedFunc finished_func) { header_written_callback = finished_func; if (!transport.getRequiresHeader()) { onHeaderWritten(this); return; } int len = 0; byte[] buffer = null; header.Write(key_vals, ref buffer, ref len); uint msg_len = (uint)len + 4; byte[] full_msg = new byte[msg_len]; uint j = 0; byte[] blen = Header.ByteLength(len); for (; j < 4; j++) { full_msg[j] = blen[j]; } for (uint i = 0; j < msg_len; j++) { i = j - 4; full_msg[j] = buffer[i]; } write(full_msg, msg_len, onHeaderWritten, true); }