|
|
/*
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__
|