Step 13 : gssapi-data generation . It is the most crucial part of LYNC developement. It gives me lot of pain.
I will describe it easily...for some reason I cann't give you the code.
I will go to the process in straight forward way..
First take the challenge data that is gssapidata: from second 401 unauthorize response then decode it in Base64 .As you know there are three type in NTLM ....
They are >>
Type1:This message contains the host name and the NT domain name of the client.
Type2: This message contains the server's NTLM challenge
Type3: This message contains the username, host name, NT domain name, and the two "responses".
You already understand what are the we need.This is Type2 from server as challenge and Type3 which you will send.For more detail about type see the link >>>ALL about NTLM TYPE
Please don't see their message format in stream of data.
The format of challenge data for type 2 is perfect as >>http://msdn.microsoft.com/en-us/library/cc236642%28v=prot.13%29.aspx
For more easiness I will describe here because it pains me so much.
Type two message format is like>>>
signature; int 32bit message_type; unsigned short length | unsigned short space | -----------target name; unsigned int offset | int 32bit flags; unsigned char challenge; guint8 zero1; unsigned short length | unsigned short space | -----------target info; unsigned int offset | int 8bit product_major_version | int 8bit product_minor_version | int 16bit product_build |--Version; int 8bit zero2 | int 8bit ntlm_revision_current |
Just broke the decrypted gssapi-data in that format thats all.
Target name is just domain name take it as unicode .Now the target info it holds time info of server as milliseconds for synchronization or security as it is.AvPair
Allaways keep in mind that all the data store is in ARRAY[OFFSET]
unsigned char* target info;
target info = (unsigned char*)&(sDecoded64.c_str()[target_info.offset]);
You understand what i have indicated...... :)