public void SignMessage(SipMessageWriter writer) { outSnum++; int srand2 = Environment.TickCount; InitializeThreadStaticVars(); int length = SignatureBuffer.Generate(scheme, srand2, outSnum, targetname, writer, ref bytes1); if (bytes2.Length < maxSignatureSize) { bytes2 = new byte[maxSignatureSize]; } secBufferDesc1.Buffers[0].SetBuffer(BufferType.SECBUFFER_DATA, bytes1, 0, length); secBufferDesc1.Buffers[1].SetBuffer(BufferType.SECBUFFER_TOKEN, bytes2); var result = Sspi.SafeMakeSignature(contextHandle, ref secBufferDesc1, 100); Tracer.WriteInformation("Signature: " + result.ToString()); if (Sspi.Succeeded(result)) { writer.WriteAuthenticationInfo(true, scheme, targetname, realm, Opaque, outSnum, srand2, new ArraySegment <byte>(bytes2, 0, secBufferDesc1.Buffers[1].Size)); if (writer.IsResponse && writer.StatusCode >= 200 && writer.StatusCode <= 299) { if (writer.Method == Methods.Registerm && writer.Expires != int.MinValue) { idleTime = DateTime.UtcNow.AddSeconds(writer.Expires + 30); idleTimeUpdatedByExpires = true; } } else { // TODO: INVITE Session-Expires } } }