private bool ProcessNextPDU()
{
RawPDU raw = new RawPDU(_network);
if (raw.Type == 0x04) {
if (_dimse == null) {
_dimse = new DcmDimseInfo();
}
}
try {
raw.ReadPDU();
switch (raw.Type) {
case 0x01: {
_assoc = new DcmAssociate();
AAssociateRQ pdu = new AAssociateRQ(_assoc);
pdu.Read(raw);
Log.Info("{0} <- Association request:\n{1}", LogID, Associate.ToString());
OnReceiveAssociateRequest(_assoc);
return true;
}
case 0x02: {
AAssociateAC pdu = new AAssociateAC(_assoc);
pdu.Read(raw);
Log.Info("{0} <- Association accept:\n{1}", LogID, Associate.ToString());
OnReceiveAssociateAccept(_assoc);
return true;
}
case 0x03: {
AAssociateRJ pdu = new AAssociateRJ();
pdu.Read(raw);
Log.Info("{0} <- Association reject [result: {1}; source: {2}; reason: {3}]", LogID, pdu.Result, pdu.Source, pdu.Reason);
OnReceiveAssociateReject(pdu.Result, pdu.Source, pdu.Reason);
return true;
}
case 0x04: {
PDataTF pdu = new PDataTF();
pdu.Read(raw);
//Log.Debug("{0} <- P-Data-TF", LogID);
return ProcessPDataTF(pdu);
}
case 0x05: {
AReleaseRQ pdu = new AReleaseRQ();
pdu.Read(raw);
Log.Info("{0} <- Association release request", LogID);
OnReceiveReleaseRequest();
return true;
}
case 0x06: {
AReleaseRP pdu = new AReleaseRP();
pdu.Read(raw);
Log.Info("{0} <- Association release response", LogID);
OnReceiveReleaseResponse();
return true;
}
case 0x07: {
AAbort pdu = new AAbort();
pdu.Read(raw);
Log.Info("{0} <- Association abort: {1} - {2}", LogID, pdu.Source, pdu.Reason);
OnReceiveAbort(pdu.Source, pdu.Reason);
return true;
}
case 0xFF: {
return false;
}
default:
throw new DicomNetworkException("Unknown PDU type");
}
} catch (SocketException) {
throw;
} catch (Exception e) {
#if DEBUG
Log.Error("{0} -> Error reading PDU [type: 0x{1:x2}]: {2}", LogID, raw.Type, e.ToString());
#else
Log.Error("{0} -> Error reading PDU [type: 0x{1:x2}]: {2}", LogID, raw.Type, e.Message);
#endif
OnNetworkError(e);
//String file = String.Format(@"{0}\Errors\{1}.pdu",
// Dicom.Debug.GetStartDirectory(), DateTime.Now.Ticks);
//Directory.CreateDirectory(Dicom.Debug.GetStartDirectory() + @"\Errors");
//raw.Save(file);
return false;
}
}