/** * Decode the User Identity Negociation RQ * * @param CDicomStreamReader $stream_reader The stream reader * * @return null */ function decodeItem(CDicomStreamReader $stream_reader) { $this->server_response_length = $stream_reader->readUInt16(); if ($this->server_response_length > 0) { $this->server_response = $stream_reader->readString($this->server_response_length); } }
/** * Decode the User Identity Negociation RQ * * @param CDicomStreamReader $stream_reader The stream reader * * @return null */ function decodeItem(CDicomStreamReader $stream_reader) { $this->user_identity_type = $stream_reader->readUInt8(); $this->positive_response_requested = $stream_reader->readUInt8(); $this->primary_field_length = $stream_reader->readUInt16(); $this->primary_field = $stream_reader->readString($this->primary_field_length); $this->secondary_field_length = $stream_reader->readUInt16(); if ($this->secondary_field_length > 0) { $this->secondary_field = $stream_reader->readString($this->secondary_field_length); } }
/** * Decode the value * * @param CDicomStreamReader $stream_reader The stream reader * @param string $endianness The endianness, must be equal to "BE" (Big Endian) or "LE" (Little Endian) * * @return null * * @todo traiter les cas FL, FD, OB, OW, OF, SQ */ protected function decodeValue(CDicomStreamReader $stream_reader, $endianness) { switch ($this->vr) { case 'AE': case 'AS': case 'CS': case 'DA': case 'DS': case 'DT': case 'FL': case 'FD': case 'IS': case 'LO': case 'LT': case 'OB': case 'OF': case 'OX': case 'OW': case 'PN': case 'SH': case 'ST': case 'TM': case 'UN': case 'UT': $this->value = $stream_reader->readString($this->length); break; case 'AT': $this->value = array(); $this->value[] = $stream_reader->readUInt16($endianness); $this->value[] = $stream_reader->readUInt16($endianness); break; case 'SL': $this->value = $stream_reader->readInt32($endianness); break; case 'SS': $this->value = $stream_reader->readInt16($endianness); break; case 'UI': $this->value = $stream_reader->readUID($this->length); break; case 'UL': $this->value = $stream_reader->readUInt32($endianness); break; case 'US': $this->value = $stream_reader->readUInt16($endianness); break; case 'SQ': $tmp_value = array(); $value_stream = new CDicomStreamReader(); /** Sequence of items with undefined length **/ if ($this->length == 0xffffffff) { $delimiter = new CDicomDataSet(); $delimiter->decode($stream_reader, $this->transfer_syntax); while ($delimiter->group_number == 0xfffe && $delimiter->element_number != 0xe0dd) { $sequence = array($delimiter); if ($delimiter->length == 0xffffffff) { $item_delimiter = new CDicomDataSet(); $item_delimiter->decode($stream_reader, $this->transfer_syntax); $sequence[] = $item_delimiter; while ($item_delimiter->group_number == 0xfffe && $item_delimiter->element_number != 0xe00d) { $dataset = new CDicomDataSet(); $dataset->decode($value_stream, $this->transfer_syntax); $sequence[] = $dataset; $item_delimiter = new CDicomDataSet(); $item_delimiter->decode($stream_reader, $this->transfer_syntax); $sequence[] = $item_delimiter; } } else { $sequence_end = $value_stream->getPos(); // + $sequence_length; while ($value_stream->getPos() < $sequence_end) { $dataset = new CDicomDataSet(); $dataset->decode($value_stream, $this->transfer_syntax); $sequence[] = $dataset; } } $delimiter = new CDicomDataSet(); $delimiter->decode($stream_reader, $this->transfer_syntax); $sequence[] = $delimiter; $tmp_value[] = $sequence; } } else { $content = $stream_reader->read($this->length); fwrite($value_stream->stream, $content, $this->length); $value_stream->rewind(); while ($value_stream->getPos() < $this->length) { $value_stream->skip(4); $sequence_length = $value_stream->readUInt32($endianness); $sequence = array(); $sequence_end = $value_stream->getPos() + $sequence_length; while ($value_stream->getPos() < $sequence_end) { $dataset = new CDicomDataSet(); $dataset->decode($value_stream, $this->transfer_syntax); $sequence[] = $dataset; } $tmp_value[] = $sequence; } } $this->value = $tmp_value; break; default: break; } }
/** * Read the length of the PDU from the stream * * @param CDicomStreamReader $stream The stream reader * * @return integer */ static function readLength(CDicomStreamReader $stream) { return $stream->readUInt32(); }
/** * Decode the PDU * * @param CDicomStreamReader $stream_reader The stream reader * * @return void */ function decodePDU(CDicomStreamReader $stream_reader) { $this->protocol_version = $stream_reader->readUInt16(); // On vérifie que la version du protocole est bien 0001 if ($this->protocol_version != 0x1) { // Erreur echo "Protocol version differente de 1"; } $stream_reader->skip(2); $this->called_AE_title = $stream_reader->readString(16); // On test si called_AE_title = AE title du serveur $this->calling_AE_title = $stream_reader->readString(16); // On passe 32 octets, réservés par Dicom $stream_reader->skip(32); $this->application_context = CDicomPDUItemFactory::decodeItem($stream_reader); $this->presentation_contexts = CDicomPDUItemFactory::decodeConsecutiveItemsByType($stream_reader, 0x21); $this->user_info = CDicomPDUItemFactory::decodeItem($stream_reader); }
/** * Decode the Implementation Class UID * * @param CDicomStreamReader $stream_reader The stream reader * * @return null */ function decodeItem(CDicomStreamReader $stream_reader) { $this->uid = $stream_reader->readUID($this->length); }
/** * Decode the datas, depending on the transfer syntax * * @param CDicomStreamReader $stream_reader The stream writer * * @param string $transfer_syntax The UID of the transfer syntax * * @return void */ function decode(CDicomStreamReader $stream_reader, $transfer_syntax) { if (!$transfer_syntax) { return; } $this->attributes = array(); $this->datasets = array(); $stream_length = $stream_reader->getStreamLength(); while ($stream_reader->getPos() < $stream_length) { $dataset = new CDicomDataSet(); $dataset->decode($stream_reader, $transfer_syntax); $group = $dataset->getGroupNumber(); $element = $dataset->getElementNumber(); if (!array_key_exists($group, $this->datasets)) { $this->datasets[$group] = array(); } if (!array_key_exists($group, $this->attributes)) { $this->attributes[$group] = array(); } $this->datasets[$group][$element] = $dataset; $this->attributes[$group][$element] = $dataset->getValue(); } }
/** * Decode the PDU * * @param CDicomStreamReader $stream_reader The stream reader * * @return null */ function decodePDU(CDicomStreamReader $stream_reader) { $stream_reader->skip(1); $this->result = $stream_reader->readUInt8(); $this->source = $stream_reader->readUInt8(); $this->diagnostic = $stream_reader->readUInt8(); }
/** * Decode the Implementation Version Name * * @param CDicomStreamReader $stream_reader The stream reader * * @return null */ function decodeItem(CDicomStreamReader $stream_reader) { $this->version_name = $stream_reader->readString($this->length); }
/** * Decode the SOP class common extended negociation item * * @param CDicomStreamReader $stream_reader The stream reader * * @return null */ function decodeItem(CDicomStreamReader $stream_reader) { $this->sop_uid_length = $stream_reader->readUInt16(); $this->sop_class_uid = $stream_reader->readUID($this->sop_uid_length); $this->service_uid_length = $stream_reader->readUInt16(); $this->service_class_uid = $stream_reader->readUID($this->service_uid_length); $this->related_sop_classes_id_length = $stream_reader->readUInt16(); if ($this->related_sop_classes_id_length > 0) { $related_sop_classes_content = $stream_reader->read($this->related_sop_classes_id_length); $handle = fopen("php://temp", "w+"); fwrite($handle, $related_sop_classes_content); $related_sop_classes_stream = new CDicomStreamReader($handle); $this->related_sop_classes_id = array(); while ($related_sop_classes_stream->tell() <= $this->related_sop_classes_id_length) { $related_sop_class_id = new CDicomSubFieldRelatedSopClassIdentification(); $related_sop_class_id->decodeField($related_sop_classes_stream); } } }
/** * Read the length of the item from the stream * * @param CDicomStreamReader $stream The stream reader * * @return integer */ static function readItemLength(CDicomStreamReader $stream) { return $stream->readUInt16(); }
/** * Decode the field * * @param CDicomStreamReader $stream_reader The stream reader * * @return null */ function decodeField(CDicomStreamReader $stream_reader) { $this->class_uid_length = $stream_reader->readUInt8(); $this->class_uid = $stream_reader->readUID($this->class_uid_length); }
/** * Decode the PDU * * @param CDicomStreamReader $stream_reader The stream reader * * @return null */ function decodePDU(CDicomStreamReader $stream_reader) { $this->pdvs = array(); $stream_reader->setStreamLength($this->getTotalLength()); while ($stream_reader->getPos() < $stream_reader->getStreamLength()) { $pdv_length = $stream_reader->readUInt32(); // + 4; //$stream_reader->seek(-4); $pdv_content = $stream_reader->read($pdv_length); $pdv_handle = fopen('php://temp', 'w+'); fwrite($pdv_handle, $pdv_content, $pdv_length); $pdv_stream = new CDicomStreamReader($pdv_handle); $pdv_stream->rewind(); $pdv = new CDicomPDV(array("presentation_contexts" => $this->presentation_contexts, "length" => $pdv_length)); $pdv->decode($pdv_stream); $this->pdvs[] = $pdv; } }
/** * Decode the PDU * * @param CDicomStreamReader $stream_reader The stream reader * * @return void */ function decodePDU(CDicomStreamReader $stream_reader) { $this->protocol_version = $stream_reader->readUInt16(); $stream_reader->skip(2); $this->called_AE_title = $stream_reader->readString(16); // On test si called_AE_title = AE title du serveur $this->calling_AE_title = $stream_reader->readString(16); // On passe 32 octets, réservés par Dicom $stream_reader->skip(32); $this->application_context = CDicomPDUItemFactory::decodeItem($stream_reader); $this->presentation_contexts = CDicomPDUItemFactory::decodeConsecutiveItemsByType($stream_reader, 0x20); $this->user_info = CDicomPDUItemFactory::decodeItem($stream_reader); }
/** * Decode the Sop Class Extended Negociation * * @param CDicomStreamReader $stream_reader The stream reader * * @return null */ function decodeItem(CDicomStreamReader $stream_reader) { $this->uid_length = $stream_reader->readUInt16(); $this->sop_class_uid = $stream_reader->readUID($this->uid_length); $this->sca_support = $stream_reader->readUInt8(); $stream_reader->skip(1); $this->sca_digital_signature_support = $stream_reader->readUInt8(); $stream_reader->skip(1); $this->sca_element_coercion = $stream_reader->readUInt8(); $stream_reader->skip(1); }
/** * Decode the Presentation Syntax * * @param CDicomStreamReader $stream_reader The stream reader * * @return null */ function decodeItem(CDicomStreamReader $stream_reader) { $this->id = $stream_reader->readUInt8(); $stream_reader->skip(1); $this->reason = $stream_reader->readUInt8(); $stream_reader->skip(1); $this->transfer_syntax = CDicomPDUItemFactory::decodeItem($stream_reader); }
/** * Decode the PDU * * @param CDicomStreamReader $stream_reader The stream reader * * @return null */ function decodePDU(CDicomStreamReader $stream_reader) { $stream_reader->skip(4); }
/** * Decode the Presentation Syntax * * @param CDicomStreamReader $stream_reader The stream reader * * @return void */ function decodeItem(CDicomStreamReader $stream_reader) { $this->id = $stream_reader->readUInt8(); $stream_reader->skip(3); $this->abstract_syntax = CDicomPDUItemFactory::decodeItem($stream_reader); $this->transfer_syntaxes = CDicomPDUItemFactory::decodeConsecutiveItemsByType($stream_reader, 0x40); }
/** * Check if the message is well formed * * @param string $msg The message * * @param CInteropActor $actor The actor who sent the message * * @return boolean */ function isWellFormed($msg, CInteropActor $actor = null) { $stream = fopen("php://temp", 'w+'); fwrite($stream, $msg); $stream_reader = new CDicomStreamReader($stream); $stream_reader->rewind(); $type = $stream_reader->readHexByte(); if ($type != "04") { $stream_reader->close(); return false; } $stream_reader->skip(1); $length = $stream_reader->readUInt32(); $stream_reader->close(); if (strlen($msg) != $length + 6) { return false; } return true; }
/** * Decode the Maximum Length * * @param CDicomStreamReader $stream_reader The stream reader * * @return null */ function decodeItem(CDicomStreamReader $stream_reader) { $this->maximum_length = $stream_reader->readUInt32(); }
/** * Decode the Implementation Version Name * * @param CDicomStreamReader $stream_reader The stream reader * * @return null */ function decodeItem(CDicomStreamReader $stream_reader) { $this->uid_length = $stream_reader->readUInt16(); $this->sop_class_uid = $stream_reader->readUID($this->uid_length); $this->scu_role = $stream_reader->readUInt8(); $this->scp_role = $stream_reader->readUInt8(); }
/** * Decode the asynchronous Operations * * @param CDicomStreamReader $stream_reader The stream reader * * @return null */ function decodeItem(CDicomStreamReader $stream_reader) { $this->max_number_operations_invoked = $stream_reader->readUInt16(); $this->max_number_operations_performed = $stream_reader->readUInt16(); }
/** * Decode the PDV * * @param CDicomStreamReader $stream_reader The stream reader * * @return null */ function decode(CDicomStreamReader $stream_reader) { // On fait un stream temp pour le message //$this->length = $stream_reader->readUInt32(); $this->pres_context_id = $stream_reader->readUInt8(); $this->message_control_header = $stream_reader->readUInt8(); $message_length = $this->length - 2; $message_content = $stream_reader->read($message_length); $handle = fopen("php://temp", "w+"); fwrite($handle, $message_content); $message_stream = new CDicomStreamReader($handle); $message_stream->rewind(); $message_stream->setStreamLength($message_length); if (!($this->transfer_syntax = $this->getTransferSyntax())) { /** @todo throw exception **/ } $this->message = CDicomMessageFactory::decodeMessage($message_stream, $this->message_control_header, $this->transfer_syntax); $message_stream->close(); $content = substr($stream_reader->buf, 13) . $message_stream->buf; $this->setBinaryContent($content); }