## Annotation is found after the has marks, and will always reference the line of the log directly following it. ## These traces being shown here are the ConvSub micro traces. ## During authentication, a flag is set to true if the message bookmark feature is enabled. 10:34:25.585 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,3,LoadSubscriberBasicData: ICsNamedProps::SetPropBool(MsgBookmark.Enabled ## When creating the stack of messages to present to the user, a flag is set to true if bookmarks can be created in that particular stack of messages 10:34:37.944 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,3,DoMessageStack: ICsNamedProps::SetPropBool(MsgBookmark.Active) to value ## The caller has disconnected and a hangup event has been generated, so a bookmark will now be created if it should and can be. 10:34:49.787 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,5,PlayMessages: ICsEventQueue::PushFront(HangupEvent) returned 0x00000000 S_OK [Src/ConvMsgStack.cpp:1169] 10:34:49.801 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,0,Entering [CreateBookmark] ## The first items checked are if bookmark are enabled and if one can be created for this message stack (the active property). If one of these items is not true then no bookmark is created. 10:34:49.801 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,3,CreateBookmark: ICsNamedProps::GetPropBool() found property MsgBookmark.Enabled = true. GetPropBool() returned 0x00000000 S_OK [Src/ConvMsgStack.cpp:2045] 10:34:49.801 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,3,CreateBookmark: ICsNamedProps::GetPropBool() found property MsgBookmark.Active = true. GetPropBool() returned 0x00000000 S_OK [Src/ConvMsgStack.cpp:2048] ## Several properties about the folder of messages being played, and the type of messages being played, are looked at to determine how to create the bookmark. 10:34:49.803 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,3,CreateBookmark: ICsNamedProps::GetPropBool() could not find property: SubscriberPrefersVUI. GetPropBool() returned 0x80043200 E_NP_PROP_NOT_FOUND [Src/ConvMsgStack.cpp:2081] 10:34:49.804 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,3,CreateBookmark: ICsNamedProps::GetPropLong() found property lFolderType = 1. GetPropLong() returned 0x00000000 S_OK [Src/ConvMsgStack.cpp:2087] 10:34:49.804 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,3,CreateBookmark: ICsNamedProps::GetPropBool() could not find property: bPlayVoiceStack. GetPropBool() returned 0x80043200 E_NP_PROP_NOT_FOUND [Src/ConvMsgStack.cpp:2091] 10:34:49.804 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,3,CreateBookmark: ICsNamedProps::GetPropBool() could not find property: bPlayEmailStack. GetPropBool() returned 0x80043200 E_NP_PROP_NOT_FOUND [Src/ConvMsgStack.cpp:2094] 10:34:49.804 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,3,CreateBookmark: ICsNamedProps::GetPropBool() could not find property: bPlayFaxStack. GetPropBool() returned 0x80043200 E_NP_PROP_NOT_FOUND [Src/ConvMsgStack.cpp:2097] 10:34:49.804 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,3,CreateBookmark: ICsNamedProps::GetPropBool() could not find property: bReceiptStack. GetPropBool() returned 0x80043200 E_NP_PROP_NOT_FOUND [Src/ConvMsgStack.cpp:2100] 10:34:49.804 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,0,Entering [CCsConvMsgBookmark] 10:34:49.805 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,0,Exiting [CCsConvMsgBookmark] ## The [Seralize] method is what actually creates the bookmark in the database. 10:34:49.806 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,0,Entering [Serialize] 10:34:49.879 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,0,Exiting [Serialize] 10:34:49.879 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,0,Exiting [CreateBookmark] ## Now the caller is calling back in. Their bookmark will be retrieved, and they will be offered to be taken back to the message they disconnected ## from. This happens after authentication but before message counts. 10:34:54.265 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,0,Entering [CheckForMsgBookmark_OnEntry] 10:34:54.265 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,3,CheckForMsgBookmark_OnEntry: ICsNamedProps::GetPropBool() found property MsgBookmark.Enabled = true. GetPropBool() returned 0x00000000 S_OK [Src/SubMsgBookmark.cpp:41] 10:34:54.265 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,0,Entering [CCsConvMsgBookmark] 10:34:54.279 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,0,Exiting [CCsConvMsgBookmark] 10:34:54.279 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,0,Entering [IsValid] 10:34:54.295 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,0,Exiting [IsValid] 10:34:54.296 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,5,CheckForMsgBookmark_OnEntry: ICsEventQueue::PushID(TRUE_EVENT) returned 0x00000000 S_OK [Src/SubMsgBookmark.cpp:62] ## A bookmark was found, so a flag is set to true to note this. 10:34:54.296 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,3,CheckForMsgBookmark_OnEntry: ICsNamedProps::SetPropBool(MsgBookmark.Found) to value: true returned 0x00000000 S_OK [Src/SubMsgBookmark.cpp:73] 10:34:54.296 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,0,Entering [GetFilterFolder] 10:34:54.296 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,0,Exiting [GetFilterFolder] ## The folder can be one of three values: 1 = new messages, 2 = saved messages, 6 = new and saved messages. ## These are the only three types of folders that will generate a bookmark for now. 10:34:54.296 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,3,CheckForMsgBookmark_OnEntry: ICsNamedProps::SetPropLong(MsgBookmark.Folder) to value: 1 returned 0x00000000 S_OK [Src/SubMsgBookmark.cpp:76] 10:34:54.296 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,0,Entering [GetFilterStack] 10:34:54.296 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,0,Exiting [GetFilterStack] ## The stack can be one of five values: 11 = all, 7 = receipts, 8 = voice, 9 = fax, 10 = email. ## These are the only types of message that will generate a bookmark for now. ## The folder and stack values are used together to re-create the list of messages the user was listening to before they were disconnected. 10:34:54.296 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,3,CheckForMsgBookmark_OnEntry: ICsNamedProps::SetPropLong(MsgBookmark.Stack) to value: 11 returned 0x00000000 S_OK [Src/SubMsgBookmark.cpp:79] 10:34:54.296 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,0,Entering [GetMessageId] 10:34:54.296 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,0,Exiting [GetMessageId] ## The unique id of the message in the database is used to find the specific message that was being listened to when the call was disconnected. 10:34:54.296 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,3,CheckForMsgBookmark_OnEntry: ICsNamedProps::SetPropString(MsgBookmark.MsgID) to value: {023b796a-23db-4d51-b52c-a8b6bc8e9059} returned 0x00000000 S_OK [Src/SubMsgBookmark.cpp:87] 10:34:54.296 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,0,Exiting [CheckForMsgBookmark_OnEntry] ## Now the caller is taken back to message playback...skipping to the relevant diags in this portion of the conversation. ## The message playback conversation will check to see if a bookmark was found, which it will use. 10:34:58.723 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,5,PlayMessages: Beginning messages... [Src/ConvMsgStack.cpp:977] 10:34:58.735 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,3,PlayMessages: ICsNamedProps::GetPropBool() found property MsgBookmark.Found = true. GetPropBool() returned 0x00000000 S_OK [Src/ConvMsgStack.cpp:989] 10:34:58.735 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,3,PlayMessages: ICsNamedProps::SetPropBool(MsgBookmark.Found) to value: false returned 0x00043210 S_NP_PROP_REPLACED [Src/ConvMsgStack.cpp:994] 10:34:58.735 |769,PhoneSystem-1-001,FFDCD2988F5F48858A204DCC7BB3B6F3,ConvSub,3,PlayMessages: ICsNamedProps::GetPropString() found property MsgBookmark.MsgID = {023b796a-23db-4d51-b52c-a8b6bc8e9059}. GetPropString() returned 0x00000000 S_OK [Src/ConvMsgStack.cpp:998] ## The diags below show what it will look like after a user has authenticated but they have no bookmark. 10:34:26.413 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,0,Entering [CheckForMsgBookmark_OnEntry] 10:34:26.413 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,3,CheckForMsgBookmark_OnEntry: ICsNamedProps::GetPropBool() found property MsgBookmark.Enabled = true. GetPropBool() returned 0x00000000 S_OK [Src/SubMsgBookmark.cpp:41] 10:34:26.413 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,0,Entering [CCsConvMsgBookmark] 10:34:26.420 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,0,Exiting [CCsConvMsgBookmark] 10:34:26.420 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,0,Entering [IsValid] 10:34:26.420 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,0,Exiting [IsValid] 10:34:26.420 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,5,CheckForMsgBookmark_OnEntry: ICsEventQueue::PushID(FALSE_EVENT) returned 0x00000000 S_OK [Src/SubMsgBookmark.cpp:68] 10:34:26.420 |770,PhoneSystem-1-001,A168DE794D8F41758CB11268B774CFE5,ConvSub,0,Exiting [CheckForMsgBookmark_OnEntry]