VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "CContentType"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Attribute VB_Ext_KEY = "SavedWithClassBuilder6" ,"Yes"
Attribute VB_Ext_KEY = "Top_Level" ,"Yes"
'programmed by ShareVB
'gestion de la ligne Content-Type:

Option Explicit
Option Compare Text

Private mvarboundary As String 'copie locale
Private mvarname As String 'copie locale
Private mvarcharset As String 'copie locale
Private mvarCTType As String 'copie locale
Private mvarCTSubType As String 'copie locale

'==================================================
'méthodes publiques
'==================================================

'analyse un champ Content-Type et remplit les propriétés de l'objet
Public Sub Parse(ByVal szContentType As String)
Dim possep As Long, possc As Long, poscharset As Long, posboundary As Long, posname As Long, posfin As Long

possep = InStr(szContentType, "/")
If possep > 0 Then
    possc = InStr(szContentType, ";")
    
    mvarCTType = Trim$(Mid$(szContentType, 1, possep - 1))
    If possc > 0 Then
        mvarCTSubType = Trim$(Mid$(szContentType, possep + 1, possc - possep - 1))
        
        posboundary = InStr(szContentType, "boundary=""")
        If posboundary > 0 Then
            posfin = InStr(posboundary + 10, szContentType, """")
            mvarboundary = Trim$(Mid$(szContentType, posboundary + 10, posfin - posboundary - 10))
        Else
            posboundary = InStr(szContentType, "boundary=")
            If posboundary > 0 Then
                posfin = InStr(posboundary + 9, szContentType, " ")
                If posfin = 0 Then
                    mvarboundary = Trim$(Mid$(szContentType, posboundary + 9))
                Else
                    mvarboundary = Trim$(Mid$(szContentType, posboundary + 9, posfin - posboundary - 9))
                End If
            End If
        End If
    
        poscharset = InStr(szContentType, "charset=""")
        If poscharset > 0 Then
            posfin = InStr(poscharset + 9, szContentType, """")
            mvarcharset = Trim$(Mid$(szContentType, poscharset + 9, posfin - poscharset - 9))
        Else
            poscharset = InStr(szContentType, "charset=")
            If poscharset > 0 Then
                posfin = InStr(poscharset + 8, szContentType, " ")
                If posfin = 0 Then
                    mvarcharset = Trim$(Mid$(szContentType, poscharset + 8))
                Else
                    mvarcharset = Trim$(Mid$(szContentType, poscharset + 8, posfin - poscharset - 8))
                End If
            End If
        End If
    
        posname = InStr(szContentType, "name=""")
        If posname > 0 Then
            posfin = InStr(posname + 6, szContentType, """")
            mvarname = Trim$(Mid$(szContentType, posname + 6, posfin - posname - 6))
        Else
            posname = InStr(szContentType, "name=")
            If posname > 0 Then
                posfin = InStr(posname + 5, szContentType, " ")
                If posfin = 0 Then
                    mvarname = Trim$(Mid$(szContentType, posname + 5))
                Else
                    mvarname = Trim$(Mid$(szContentType, posname + 5, posfin - posname - 5))
                End If
            End If
        End If
    Else
        mvarCTSubType = Trim$(Mid$(szContentType, possep + 1))
    End If
End If
End Sub

'génère une borne de séparation des sous parties d'une partie d'un mail sous la forme attendue par l'attribut boundary (sans CRLF et "--")
Public Sub GenerateBoundary()
Randomize Timer
mvarboundary = "=_" & Right$("00000000" & Hex$(CLng(&H7FFFFFF0 * Rnd)), 8) & "." & Right$("00000000" & Hex$(CLng((&H7FFFFFF0) * Rnd)), 8)
End Sub

'fabrique un champ Content-Type à partir des propriétés de l'objet
Public Function Make() As String
Dim szParameters As String

If mvarCTType = "multipart" Then
    szParameters = "boundary=""" & mvarboundary & """"
ElseIf mvarCTType = "text" Then
    szParameters = "charset=""" & mvarcharset & """"
End If
If Len(mvarname) Then
    If Len(szParameters) Then szParameters = szParameters & vbCrLf & " "
    szParameters = szParameters & "name=""" & mvarname & """"
End If

If Len(szParameters) Then
    Make = "Content-Type: " & mvarCTType & "/" & mvarCTSubType & "; " & szParameters
Else
    Make = "Content-Type: " & mvarCTType & "/" & mvarCTSubType
End If
End Function

'==================================================
'propriétés
'==================================================

'définit ou renvoie le sous type MIME de la partie (plain, html, jpeg, gif, octet-stream,...)
Public Property Let CTSubType(ByVal vData As String)
Attribute CTSubType.VB_HelpID = 241
'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche de l'affectation.
'Syntax: X.CTSubType = 5
    mvarCTSubType = vData
End Property
Public Property Get CTSubType() As String
'utilisé lors de la lecture de la valeur de la propriété, du coté droit de l'instruction.
'Syntax: Debug.Print X.CTSubType
    CTSubType = mvarCTSubType
End Property

'définit ou renvoie le type MIME de la partie (text, image, audio, video, application,...)
Public Property Let CTType(ByVal vData As String)
Attribute CTType.VB_HelpID = 239
'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche de l'affectation.
'Syntax: X.CTType = 5
    mvarCTType = vData
End Property
Public Property Get CTType() As String
'utilisé lors de la lecture de la valeur de la propriété, du coté droit de l'instruction.
'Syntax: Debug.Print X.CTType
    CTType = mvarCTType
End Property

'définit ou renvoie le charset de la partie (us-ascii, iso-8859-1, ...)
Public Property Let charset(ByVal vData As String)
Attribute charset.VB_HelpID = 237
'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche de l'affectation.
'Syntax: X.charset = 5
    mvarcharset = vData
End Property
Public Property Get charset() As String
'utilisé lors de la lecture de la valeur de la propriété, du coté droit de l'instruction.
'Syntax: Debug.Print X.charset
    charset = mvarcharset
End Property

'définit ou renvoie le nom de la partie (utilisé pour les pièces jointes inline)
Public Property Let CTName(ByVal vData As String)
Attribute CTName.VB_HelpID = 235
'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche de l'affectation.
'Syntax: X.CTName = 5
    mvarname = vData
End Property
Public Property Get CTName() As String
'utilisé lors de la lecture de la valeur de la propriété, du coté droit de l'instruction.
'Syntax: Debug.Print X.CTName
    CTName = mvarname
End Property

'renvoie la borne de séparation des sous parties
Public Property Get boundary() As String
'utilisé lors de la lecture de la valeur de la propriété, du coté droit de l'instruction.
'Syntax: Debug.Print X.boundary
    boundary = mvarboundary
End Property
