394 lines
7 KiB
C++
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__
|