Ocean/ICCC/Send.go

45 lines
1.8 KiB
Go
Raw Normal View History

package ICCC
import (
"github.com/SommerEngineering/Ocean/ICCC/Scheme"
"github.com/SommerEngineering/Ocean/Log"
LM "github.com/SommerEngineering/Ocean/Log/Meta"
"github.com/SommerEngineering/Ocean/Tools"
"io/ioutil"
"net/http"
"net/url"
)
2015-06-17 15:44:52 +00:00
// Send a message to a listener.
func sendMessage(listener Scheme.Listener, data map[string][]string) (result map[string][]string) {
2015-06-17 15:44:52 +00:00
// Convert the data and encode it:
valuesHTTP := url.Values(data)
2015-06-17 15:44:52 +00:00
// Add the communication password:
valuesHTTP.Add(`InternalCommPassword`, Tools.InternalCommPassword())
2015-06-17 15:44:52 +00:00
// Try to deliver the message:
if response, err := http.PostForm(`http://`+listener.IPAddressPort+`/ICCC`, valuesHTTP); err != nil {
2015-06-17 15:44:52 +00:00
// Case: Was not possible to deliver.
Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelERROR, LM.SeverityCritical, LM.ImpactUnknown, LM.MessageNameNETWORK, `Was not able to send the ICCC message.`, err.Error())
} else {
// Case: Delivery was fine.
defer response.Body.Close()
if responseData, err := ioutil.ReadAll(response.Body); err != nil {
// Case: Was not possible to read the answer.
Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelERROR, LM.SeverityCritical, LM.ImpactUnknown, LM.MessageNameNETWORK, `Was not able to read the ICCC answer.`, err.Error())
} else {
// Case: Was able to read the answer.
if dataObj, errObj := url.ParseQuery(string(responseData)); errObj != nil {
// Case: Was not able to parse the answer to values.
Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelERROR, LM.SeverityCritical, LM.ImpactUnknown, LM.MessageNameNETWORK, `Was not able to parse the answer to values.`, errObj.Error())
} else {
// Case: Everything was fine.
result = map[string][]string(dataObj)
}
}
}
return
}