public SdpServiceExpectedCall(UInt16 attrId, SdpService.DESC_TYPE attrType, UInt32 attrLen, byte[] val) { this.attrId = attrId; this.attrType = attrType; this.attrLen = attrLen; this.val = val; Debug.Assert(attrLen == val.Length, "consistent length?!"); }
void ISdpService.AddAttribute(ushort id, SdpService.DESC_TYPE dt, int valLen, byte[] val) { log.AppendFormat(System.Globalization.CultureInfo.InvariantCulture, "AddAttribute: id: 0x{0:X4}, dt: {1}, len: {2}, val: {3}\r\n", id, dt, valLen, val == null ? "(null)" : BitConverter.ToString(val)); m_actualAddAttr.Add(new SdpServiceExpectedCall(id, dt, checked ((uint)valLen), val)); ++m_countAddAttributeCalls; Debug.Assert(m_actualAddAttr.Count == m_countAddAttributeCalls, "count and list count"); }
//-------- private static SdpService.DESC_TYPE ToDESC_TYPE(ElementTypeDescriptor elementTypeDescriptor) { // This is actually a one-to-one exact match, so no need for this map // but leave, as it allows us to block Nil for instance. SdpService.DESC_TYPE dt; switch (elementTypeDescriptor) { case ElementTypeDescriptor.UnsignedInteger: dt = SdpService.DESC_TYPE.UINT; break; case ElementTypeDescriptor.TwosComplementInteger: dt = SdpService.DESC_TYPE.TWO_COMP_INT; break; case ElementTypeDescriptor.Uuid: dt = SdpService.DESC_TYPE.UUID; break; case ElementTypeDescriptor.TextString: dt = SdpService.DESC_TYPE.TEXT_STR; break; case ElementTypeDescriptor.Boolean: dt = SdpService.DESC_TYPE.BOOLEAN; break; case ElementTypeDescriptor.ElementSequence: dt = SdpService.DESC_TYPE.DATA_ELE_SEQ; break; case ElementTypeDescriptor.ElementAlternative: dt = SdpService.DESC_TYPE.DATA_ELE_ALT; break; case ElementTypeDescriptor.Url: dt = SdpService.DESC_TYPE.URL; break; // case ElementTypeDescriptor.Unknown: case ElementTypeDescriptor.Nil: default: throw new ArgumentException("ToDESC_TYPE(" + elementTypeDescriptor + ")"); } return(dt); }
protected override void CompleteHeaderWrite(HeaderWriteState headerState, byte[] buf, int offsetAtEndOfWritten, out int totalLength) { base.CompleteHeaderWrite(headerState, buf, offsetAtEndOfWritten, out totalLength); // if (headerState.widcommNeedsStoring) { Debug.Assert(!this.needWrite, "overwrite"); Debug.Assert(this.isInSeqOrAlt); this.isInSeqOrAlt = false; int startOffset = headerState.HeaderOffset + headerState.HeaderLength; byte[] val = new byte[offsetAtEndOfWritten - startOffset]; Array.Copy(buf, startOffset, val, 0, val.Length); this.value = val; this.dt = ToDESC_TYPE(headerState.Etd); this.needWrite = true; } }
protected override void WriteFixedLength(ServiceElement element, byte[] valueBytes, byte[] buf, ref int offset, out int totalLength) { if (this.isAttrId) { } else if (this.isInSeqOrAlt) { // Child of a SEQ/ALT, will be written from byte buffer. } else { Debug.Assert(!this.needWrite, "overwrite"); this.value = (byte[])valueBytes.Clone(); this.dt = ToDESC_TYPE(element.ElementTypeDescriptor); this.needWrite = true; } // base.WriteFixedLength(element, valueBytes, buf, ref offset, out totalLength); }