/** * Encode the Implementation Version Name * * @param CDicomStreamWriter $stream_writer The stream writer * * @return null */ function encodeItem(CDicomStreamWriter $stream_writer) { $this->calculateLength(); $stream_writer->writeUInt8($this->type); $stream_writer->skip(1); $stream_writer->writeUInt16($this->length); $stream_writer->writeString($this->version_name, $this->length); }
/** * Encode the User Identity Negociation RQ * * @param CDicomStreamWriter $stream_writer The stream writer * * @return null */ function encodeItem(CDicomStreamWriter $stream_writer) { $this->calculateLength(); $stream_writer->writeUInt8($this->type); $stream_writer->skip(1); $stream_writer->writeUInt16($this->length); $stream_writer->writeUInt16($this->server_response_length); if ($this->server_response_length > 0) { $stream_writer->writeString($this->server_response, $this->server_response_length); } }
/** * Encode the User Identity Negociation RQ * * @param CDicomStreamWriter $stream_writer The stream writer * * @return null */ function encodeItem(CDicomStreamWriter $stream_writer) { $this->calculateLength(); $stream_writer->writeUInt8($this->type); $stream_writer->skip(1); $stream_writer->writeUInt16($this->length); $stream_writer->writeUInt8($this->user_identity_type); $stream_writer->writeUInt8($this->positive_response_requested); $stream_writer->writeUInt16($this->primary_field_length); $stream_writer->writeString($this->primary_field, $this->primary_field_length); $stream_writer->writeUInt16($this->secondary_field_length); if ($this->secondary_field_length > 0) { $stream_writer->writeString($this->secondary_field, $this->secondary_field_length); } }
/** * Encode the value * * @param CDicomStreamWriter $stream_writer The stream writer * * @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 encodeValue(CDicomStreamWriter $stream_writer, $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': if ($this->length & 1) { $this->value .= " "; $this->length++; } $stream_writer->writeString($this->value, $this->length); break; case 'AT': $stream_writer->writeUInt16($this->value[0], $endianness); $stream_writer->writeUInt16($this->value[1], $endianness); break; case 'SL': $stream_writer->writeInt32($this->value, $endianness); break; case 'SS': $stream_writer->writeInt16($this->value, $endianness); break; case 'UI': $stream_writer->writeUID($this->value, $this->length); if ($this->length & 1) { $stream_writer->writeUInt8(0x0); $this->length++; } break; case 'UL': $stream_writer->writeUInt32($this->value, $endianness); break; case 'US': $stream_writer->writeUInt16($this->value, $endianness); break; case 'SQ': $value_stream = new CDicomStreamWriter(); $value_tmp = array(); if (is_array($this->value)) { foreach ($this->value as $_sequence) { $sequence = array(); $sequence_stream = new CDicomStreamWriter(); foreach ($_sequence as $_item) { $dataset = new CDicomDataSet($_item); $dataset->encode($sequence_stream, $this->transfer_syntax); $sequence[] = $dataset; } $sequence_length = strlen($sequence_stream->buf); $value_stream->writeUInt16(0xfffe, $endianness); $value_stream->writeUInt16(0xe000, $endianness); $value_stream->writeUInt32($sequence_length, $endianness); $value_stream->write($sequence_stream->buf, $sequence_length); $this->length += 8 + $sequence_length; $value_tmp[] = $sequence; } $stream_writer->write($value_stream->buf, $this->length); $this->value = $value_tmp; } else { $this->length = 8; $stream_writer->writeUInt16(0xfffe, $endianness); $stream_writer->writeUInt16(0xe000, $endianness); $stream_writer->writeUInt32(0, $endianness); } break; default: break; } }
/** * Encode the PDU * * @param CDicomStreamWriter $stream_writer The stream writer * * @return void */ function encodePDU(CDicomStreamWriter $stream_writer) { $this->calculateLength(); $stream_writer->writeUInt8($this->type); $stream_writer->skip(1); $stream_writer->writeUInt32($this->length); $stream_writer->writeUInt16($this->protocol_version); $stream_writer->skip(2); $stream_writer->writeString($this->called_AE_title, 16); $stream_writer->writeString($this->calling_AE_title, 16); $stream_writer->skip(32); $this->application_context->encodeItem($stream_writer); foreach ($this->presentation_contexts as $_item) { $_item->encodeItem($stream_writer); } $this->user_info->encodeItem($stream_writer); }