{-# LANGUAGE OverloadedStrings, RecordWildCards #-}
module Network.Avahi.Announce where

import Data.Int
import Data.Word
import Data.Char
import Data.Maybe
import qualified DBus.Client as C
import DBus.Client.Simple

import Network.Avahi.Common

-- | Announce network service
announce :: Service      -- ^ Service to announce
         -> IO ()
announce (Service {..}) = do
  bus <- connectSystem
  server <- proxy bus avahiBus "/"
  [newGroup] <- call server serverInterface "EntryGroupNew" []
  new <- proxy bus avahiBus (fromJust $ fromVariant newGroup)
  let text' = [map (fromIntegral . ord) serviceText] :: [[Word8]]
  call new entryGroupInterface "AddService" [toVariant (-1 :: Int32), -- IF_UNSPEC
                                             proto2variant serviceProtocol,
                                             flags_empty,
                                             toVariant serviceName,
                                             toVariant serviceType,
                                             toVariant serviceDomain,
                                             toVariant serviceHost,
                                             toVariant servicePort,
                                             toVariant text']
  call new entryGroupInterface "Commit" []
  return ()