private function initField($field, $metadata = [])
{
if ($this->inputVarCount++ == $this->maxInputVars || \strlen($field) > $this->maxFieldLen) {
$this->fail();
return null;
}
$this->curSizes[$field] = 0;
$this->usedSize += \strlen($field);
if ($this->usedSize > $this->size) {
$this->fail();
return null;
}
if (isset($this->bodyPromisors[$field])) {
$key = key($this->bodyPromisors[$field]);
list($dataPromisor, $metadataPromisor) = $this->bodyPromisors[$field][$key];
$metadataPromisor->succeed($metadata);
unset($this->bodyPromisors[$field]);
} else {
$dataPromisor = new Deferred();
$this->bodies[$field][] = new FieldBody($dataPromisor->promise(), new Success($metadata));
}
foreach ($this->watchers as list($cb, $cbData)) {
$cb($field, $cbData);
}
return $dataPromisor;
}