windows-nt/Source/XPSP1/NT/net/tapi/skywalker/inc/sdpbstrl.h
2020-09-26 16:20:57 +08:00

394 lines
7 KiB
C++

/*
Copyright (c) 1997-1999 Microsoft Corporation
Module Name:
sdpbstrl.h
Abstract:
Author:
*/
#ifndef __SDP_BSTRING_LINE__
#define __SDP_BSTRING_LINE__
#include "sdpcommo.h"
#include <wtypes.h>
#include "sdpdef.h"
#include "sdpgen.h"
#include "sdpcstrl.h"
#include "sdpcset.h"
class _DllDecl SDP_ARRAY_BSTR : public CArray<BSTR, BSTR>
{
public:
virtual ~SDP_ARRAY_BSTR();
};
class _DllDecl SDP_BSTRING : public SDP_CHAR_STRING
{
public:
inline SDP_BSTRING();
virtual void Reset();
inline SDP_CHARACTER_SET GetCharacterSet() const;
inline BOOL SetCharacterSet(IN SDP_CHARACTER_SET CharacterSet);
inline BSTR &GetBstr();
HRESULT GetBstrCopy(IN BSTR *Bstr);
virtual HRESULT GetBstr(IN BSTR *Bstr);
virtual HRESULT SetBstr(IN BSTR Bstr);
virtual ~SDP_BSTRING();
protected:
SDP_CHARACTER_SET m_CharacterSet;
UINT m_CodePage;
BSTR m_Bstr;
virtual BOOL InternalSetCharStrByRef(
IN CHAR *CharacterStringByReference,
IN DWORD Length
);
virtual BOOL InternalSetCharStrByCopy(
IN const CHAR *CharacterStringByCopy,
IN DWORD Length
);
virtual BOOL InternalParseToken(
IN CHAR *Token
);
BOOL ConvertToBstr(
);
};
inline
SDP_BSTRING::SDP_BSTRING(
)
: m_Bstr(NULL),
m_CharacterSet(CS_UTF8),
m_CodePage(CP_UTF8)
{
}
inline SDP_CHARACTER_SET
SDP_BSTRING::GetCharacterSet(
) const
{
return m_CharacterSet;
}
inline BOOL
SDP_BSTRING::SetCharacterSet(
IN SDP_CHARACTER_SET CharacterSet
)
{
// check if the character set value is acceptable
if ( !IsLegalCharacterSet(CharacterSet, &m_CodePage) )
{
SetLastError(SDP_INTERNAL_ERROR);
return FALSE;
}
m_CharacterSet = CharacterSet;
return TRUE;
}
inline BSTR &
SDP_BSTRING::GetBstr(
)
{
return m_Bstr;
}
// its initially created with the ascii character set and
// it doesn't allow for changing the character set
class _DllDecl SDP_OPTIONAL_BSTRING : public SDP_BSTRING
{
public:
inline SDP_OPTIONAL_BSTRING();
virtual void Reset();
// returns the bstr for the character string
// creates a bstr if required
virtual HRESULT GetBstr(IN BSTR *Bstr);
virtual HRESULT SetBstr(IN BSTR Bstr);
protected:
BOOL m_IsBstrCreated;
virtual BOOL InternalSetCharStrByRef(
IN CHAR *CharacterStringByReference,
IN DWORD Length
);
virtual BOOL InternalSetCharStrByCopy(
IN const CHAR *CharacterStringByCopy,
IN DWORD Length
);
private:
// since the bstr must only be created on demand, parsing must
// be over-ridden such that the bstr is not created during parsing
virtual BOOL InternalParseToken(
IN CHAR *Token
);
// ZoltanS win64 fix: This bogus code was causing warnings.
// Removed these methods so that the compiler will make sure that they
// are never called. (Why it was ever done this way is a real mystery.)
//
// inline BOOL SetCharacterSet(IN SDP_CHARACTER_SET CharacterSet)
// {
// // this is never called
// ASSERT(FALSE);
// return FALSE;
// }
//
// inline BSTR &GetBstr()
// {
// BSTR ReturnValue;
// // this is never called
// ASSERT(FALSE);
// return ReturnValue;
// }
};
inline
SDP_OPTIONAL_BSTRING::SDP_OPTIONAL_BSTRING(
)
: m_IsBstrCreated(FALSE)
{}
class _DllDecl SDP_BSTRING_LINE : public SDP_STRING_LINE
{
public:
inline SDP_BSTRING_LINE(
IN const DWORD ErrorCode,
IN const CHAR *TypeString,
IN SDP_BSTRING &SdpBstring
);
virtual HRESULT GetBstrCopy(IN BSTR *Bstr);
virtual HRESULT SetBstr(IN BSTR Bstr);
inline SDP_BSTRING &GetBstring();
};
inline
SDP_BSTRING_LINE::SDP_BSTRING_LINE(
IN const DWORD ErrorCode,
IN const CHAR *TypeString,
IN SDP_BSTRING &SdpBstring
)
: SDP_STRING_LINE(ErrorCode, TypeString, SdpBstring)
{
}
inline SDP_BSTRING &
SDP_BSTRING_LINE::GetBstring(
)
{
return (SDP_BSTRING &)m_ParseField;
}
class _DllDecl SDP_REQD_BSTRING_LINE : public SDP_BSTRING_LINE
{
public:
inline SDP_REQD_BSTRING_LINE(
IN const DWORD ErrorCode,
IN const CHAR *TypeString
);
private:
SDP_BSTRING m_Bstring;
virtual void InternalReset();
};
inline
SDP_REQD_BSTRING_LINE::SDP_REQD_BSTRING_LINE(
IN const DWORD ErrorCode,
IN const CHAR *TypeString
)
: SDP_BSTRING_LINE(ErrorCode, TypeString, m_Bstring)
{
}
class _DllDecl SDP_CHAR_STRING_LINE : public SDP_BSTRING_LINE
{
public:
inline SDP_CHAR_STRING_LINE(
IN const DWORD ErrorCode,
IN const CHAR *TypeString
);
private:
SDP_OPTIONAL_BSTRING m_SdpOptionalBstring;
virtual void InternalReset();
};
inline
SDP_CHAR_STRING_LINE::SDP_CHAR_STRING_LINE(
IN const DWORD ErrorCode,
IN const CHAR *TypeString
)
: SDP_BSTRING_LINE(ErrorCode, TypeString, m_SdpOptionalBstring)
{
}
class _DllDecl SDP_LIMITED_CHAR_STRING : public SDP_OPTIONAL_BSTRING
{
public:
inline SDP_LIMITED_CHAR_STRING(
IN const CHAR **LegalStrings,
IN DWORD NumStrings
);
HRESULT SetLimitedCharString(
IN CHAR *String
);
protected:
const CHAR **m_LegalStrings;
const DWORD m_NumStrings;
virtual BOOL InternalParseToken(
IN CHAR *Token
);
};
inline
SDP_LIMITED_CHAR_STRING::SDP_LIMITED_CHAR_STRING(
IN const CHAR **LegalStrings,
IN DWORD NumStrings
)
: m_LegalStrings(LegalStrings),
m_NumStrings(NumStrings)
{
}
class _DllDecl SDP_ADDRESS : public SDP_OPTIONAL_BSTRING
{
public:
inline SDP_ADDRESS();
inline BOOL IsMulticast() const;
inline void SetMulticast(
IN BOOL IsMulticastFlag
);
HRESULT SetAddress(
IN BSTR Address
);
// calls SetAddress(Bstr)
virtual HRESULT SetBstr(
IN BSTR Bstr
);
protected:
BOOL m_IsMulticastFlag;
virtual BOOL InternalParseToken(
IN CHAR *Token
);
BOOL IsValidIP4Address(
IN CHAR *Address,
OUT ULONG &Ip4AddressValue
);
};
inline SDP_ADDRESS::SDP_ADDRESS(
)
: m_IsMulticastFlag(FALSE)
{
}
inline BOOL
SDP_ADDRESS::IsMulticast(
) const
{
return m_IsMulticastFlag;
}
inline void
SDP_ADDRESS::SetMulticast(
IN BOOL IsMulticastFlag
)
{
m_IsMulticastFlag = IsMulticastFlag;
}
#endif // __SDP_BSTRING_LINE__