/**
  * 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);
     }
 }
Пример #3
0
 /**
  * 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;
     }
 }
Пример #4
0
 /**
  * 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);
 }
Пример #13
0
 /**
  * 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);
 }
Пример #17
0
 /**
  * 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);
 }
Пример #19
0
 /**
  * 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();
 }
Пример #23
0
 /**
  * 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);
 }