protected void SendControlPacket(EndPoint end, int remoteid, int localid,
ControlCode c, object state)
{
using(MemoryStream ms = new MemoryStream()) {
NumberSerializer.WriteInt((int)c, ms);
if( c == ControlCode.EdgeDataAnnounce ) {
UdpEdge e = (UdpEdge)_id_ht[localid];
if( (e != null) && (e.RemoteID == remoteid) ) {
Hashtable t = new Hashtable();
t["RemoteTA"] = e.RemoteTA.ToString();
t["LocalTA"] = e.LocalTA.ToString();
AdrConverter.Serialize(t, ms);
}
else {
if(ProtocolLog.UdpEdge.Enabled)
ProtocolLog.Write(ProtocolLog.UdpEdge, String.Format(
"Problem sending EdgeData: EndPoint: {0}, remoteid: {1}, " +
"localid: {2}, Edge: {3}", end, remoteid, localid, e));
}
}
_send_queue.Enqueue(new UdpMessage(localid, ~remoteid, MemBlock.Reference(ms.ToArray()), end));
if(ProtocolLog.UdpEdge.Enabled) {
ProtocolLog.Write(ProtocolLog.UdpEdge, String.Format(
"Sending control {1} to: {0}", end, c));
}
}
}
/**