| 701 | } |
| 702 | |
| 703 | void ConfigStorage::addSession(TraceSession& session) |
| 704 | { |
| 705 | const ULONG size = getSessionSize(session); |
| 706 | const ULONG idx = allocSlot(size); |
| 707 | |
| 708 | TraceCSHeader* header = m_sharedMemory->getHeader(); |
| 709 | TraceCSHeader::Slot* slot = &header->slots[idx]; |
| 710 | |
| 711 | setDirty(); |
| 712 | |
| 713 | // setup some session fields |
| 714 | session.ses_id = slot->ses_id; |
| 715 | session.ses_flags |= trs_active; |
| 716 | slot->ses_flags = session.ses_flags; |
| 717 | time(&session.ses_start); |
| 718 | |
| 719 | char* p = reinterpret_cast<char*> (header) + slot->offset; |
| 720 | Writer writer(p, slot->size); |
| 721 | |
| 722 | if (!session.ses_name.empty()) { |
| 723 | writer.write(tagName, session.ses_name.length(), session.ses_name.c_str()); |
| 724 | } |
| 725 | if (session.ses_auth.hasData()) { |
| 726 | writer.write(tagAuthBlock, session.ses_auth.getCount(), session.ses_auth.begin()); |
| 727 | } |
| 728 | if (!session.ses_user.empty()) { |
| 729 | writer.write(tagUserName, session.ses_user.length(), session.ses_user.c_str()); |
| 730 | } |
| 731 | if (session.ses_role.hasData()) { |
| 732 | writer.write(tagRole, session.ses_role.length(), session.ses_role.c_str()); |
| 733 | } |
| 734 | if (!session.ses_config.empty()) { |
| 735 | writer.write(tagConfig, session.ses_config.length(), session.ses_config.c_str()); |
| 736 | } |
| 737 | writer.write(tagStartTS, sizeof(session.ses_start), &session.ses_start); |
| 738 | if (!session.ses_logfile.empty()) { |
| 739 | writer.write(tagLogFile, session.ses_logfile.length(), session.ses_logfile.c_str()); |
| 740 | } |
| 741 | writer.write(tagEnd, 0, NULL); |
| 742 | } |
| 743 | |
| 744 | bool ConfigStorage::getSession(Firebird::TraceSession& session, GET_FLAGS getFlag) |
| 745 | { |